Tag: sql

JDBC SQL数据库被锁定了吗?

我正在编写一个使用本地SQL数据库来存储数据的程序。 我正在使用此处找到的驱动程序: https : //bitbucket.org/xerial/sqlite-jdbc 我试图从数据库中读取并将tableName的内容放入JTable中,如下所示: public Object[][] getTable(String tableName){ int columns = getColumnNumber(tableName); int rows = getRowNumber(tableName); String[] columnNames = getColumnNames(tableName); Object[][] table = new Object[rows][columns]; try{ Connection connection = DriverManager.getConnection(“jdbc:sqlite:” + dbName + “.db”); Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(“select * from ” + tableName); for(int r = 0; r < […]

用Java Express连接Java

我使用Java和MySQL设计了一个数据库管理系统。 我使用WAMP作为服务器。 现在一切都很完美……直到现在…… 现在,我必须使用SQL Express而不是WAMP 。 我对SQL Express一无所知。 我在默认情况下安装了它。 但是,现在我可以使用以下选项连接到Microsoft SQL Server Management Studio中的数据库,( LORDXAX-PC是我的计算机名称) 但我需要将数据库与我的Java程序连接起来。 (之前我使用过JDBC成功,使用WAMP) 需要帮助才能成功吗? 我试过找到某些东西,但它会给出错误。 有人可以给我提供干净的说明.. 任何帮助表示赞赏。 谢谢! 编辑(2) 这是一个完整的代码,展示了这个问题。 package ExpressTest; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; public class MAIN { public static void main(String[] args) { new MAIN().start(); } private void start() { System.out.println(“START”); String query = “SELECT * […]

不支持Hive方法

我试图使用Hive作为底层数据存储运行SQl查询,该查询调用Big Decimal函数并引发以下错误: 不支持的方法 org.apache.hadoop.hive.jdbc.HivePreparedStatement.setBigDecimal(HivePreparedStatement.java:317) 这只是因为Hive不支持如下: public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException { // TODO Auto-generated method stub throw new SQLException(“Method not supported”); } 请建议可用于解决此类问题的其他解决方法或修复方法

JPA内存管理问题

首先,一点背景。 我正在研究从SQL Server中提取数据的管理软件。 我正在使用JPA创建表的Entity实例以便在管理软件中进行操作(我现在只使用JPA几天)。 作为测试,我将下面的代码汇总在一起,以测试存储多少内存将占用最丰富的表(PeriodicalTable)的对象,这些表有18,500行(或大约有)并且只能增长; public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory(“PersistenceDemoPU”); EntityManager em = emf.createEntityManager(); Query query = em.createQuery(“SELECT p FROM PeriodicalTable p”); //query.setMaxResults(7000); List results = query.getResultList(); PeriodicalTable storedPlayer; for (int i = 0; i < results.size(); i++){ storedPlayer = results.get(i); System.out.println(storedPlayer.toString()); if (i == (results.size()-1)){System.out.println("Total results: "+(i+1)); } } […]

这个简单的字符串转义是否可以阻止任何SQL注入?

我在一家公司工作,负责数据库模块的人严格禁止使用预准备语句。 我担心他的实施不安全。 以下是我们当前用于进行SQL查询的代码(带有JDBC / MySQL 5.5的Java 8应用程序): String value = “Raw user input over HTTP-Form”; String sql = “SELECT * FROM db1.articles WHERE title like ‘” + replaceSingleQuotes(value) + “‘”; executeSQL(sql); public static String replaceSingleQuotes(String value) { value = value.replaceAll(“\\\\”, “\\\\\\\\”); return value.replaceAll(“‘”, “\\\\'”); } 我无法进行任何注射,但他的解决方案对我来说似乎非常可疑。 任何人都可以指出如何逃避这种逃避吗? 如果我无法提出任何问题,我将不会更换他的代码,我们的应用程序(银行业务)中有数千名客户提供非常敏感的信息。 编辑:不幸的是我无法显示executeSQL(),因为有一个庞大的类层次结构混乱,一切都是分散的。 但它归结为这样的事情: String query = … // […]

java.sql.SQLException:参数索引超出范围(2>参数个数,为0)

public class Brothers extends javax.swing.JFrame { /** * declaring connection and SQL statement */ Connection cn; Statement st; PreparedStatement pstmt=null; PreparedStatement pst; ResultSet rs; Object fname, mname, lname, bdate, nation, statusq,InstNo, photo, combo, place, mimi; int status; public Brothers() { dbconnect _db = new dbconnect(); /*//////////////the above is just to show that I have two […]

SQLGrammarException:无法执行查询

我正在使用Struts2和Hibernate并在使用字符串test搜索数据时遇到错误,但在使用数字111搜索时对我有用。 我从bean类中获取此值,并在bean类中定义了字符串类型的属性。 下面我提供的代码: public String retrieveRecords() { String empId = p.getEmpId(); String paramValue = “”; if(empId !=null) if(!(empId.isEmpty())) paramValue =” where b.empId=”+empId; String empName = p.getEmployeeName(); if(empName !=null && empName != “”) { if(!(empName.isEmpty())){ if(paramValue == “”) paramValue =” where b.employeeName=”+empName; else paramValue =paramValue + ” and b.employeeName=”+empName; } } System.out.println(“=========paramvalues====”+paramValue); recList = (List) session.createQuery(“from […]

在hibernate本机查询中获取新创建的行ID

sess.createSQLQuery(“INSERT INTO ARCHIVE (folder) VALUES(:folder)”) .setParameter(“folder”,path) .executeUpdate(); 我想拥有新创建的对象的id。 我怎样才能做到这一点?

如何创建可滚动的ResultSet?

我得到了这个简单的代码来从MSSQL Server 2008中检索记录集,由于我设置了ResultSet.TYPE_SCROLL_INSENSITVE,因此必须可以滚动它,与Javadocs中的示例相同: String qry = “SELECT * from tblPeople”; SQLConnection sql = new SQLConnection(); Statement stmt = sql.getConnection().createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery(qry); 不幸的是,当我想获得像rs.last(); int rowCount = rs.getRow();这样的行数时,我仍然得到了这个Stack Trace rs.last(); int rowCount = rs.getRow(); rs.last(); int rowCount = rs.getRow(); : java.sql.SQLException: ResultSet may only be accessed in a forward direction. at net.sourceforge.jtds.jdbc.JtdsResultSet.checkScrollable(JtdsResultSet.java:304) at […]

快速而又脏的SQL字符串转义

我正在为一个带有postgresql DB的Web应用程序的家庭滚动QueryBuilder类进行最后润色。 它将PreparedStatement用于所有查询,并受到SQL注入的保护。 但是,我想要一种“快速和脏”的方式来表示QueryBuilder及其toString()方法,仅用于调试目的。 该方法将组装查询字符串,通常传递给PreparedStatement ,然后简单地替换每个? 在字符串中具有相应的单引号值。 toString() javadoc将警告其他开发人员,这是一个不安全的近似,仅用于调试等。 我知道这些值应该是他们的单引号加倍(即O’Connell逃到O”Connell )。 是否还有其他应该处理的特殊字符我忘记了? 我寻找类似的问题,但只发现人们被骂使用PreparedStatement (他们应该,让记录显示)。 编辑:不打算使用第三方工具完成这个特定的任务,我真的只想在这里快速而肮脏。 我确实欣赏这些链接 – 我可能会将它们视为其他用途。 最后编辑:感谢所有有用的指示。 我只想补充一点,对于那些从谷歌这里绊倒的人来说,不要将这些技巧用于击中数据库的任何内容,请使用PreparedStatement 。