Tag: jdbc

使用预准备语句和变量将Java中的Order By与JDBC驱动程序绑定

我在用着 jdbcTemplate与mySQL数据库建立JDBC连接 准备好的语句尽可能地保护自己免受SQL注入攻击 需要接受来自用户的请求,以对十几个不同列中的任何一列进行数据排序 以下声明 jdbcTemplate.query(“SELECT * FROM TABLE1 ORDER BY ? ?”, colName, sortOrder); 当然这不起作用,因为变量绑定不应该仅为查询中的表达式的参数值指定列名。 那么……人们如何解决这个问题呢? 只是在Java代码中进行排序似乎是一个简单的解决方案,但是因为我得到一个变量字符串供列排序,一个变量告诉我排序顺序….这是一个丑陋的比较器条件数量盖。 这似乎应该是解决它的常见模式的常见问题……

在将Java Date写入SQL TIMESTAMP列之前,JDBC是否将日期从JVM时区转换为数据库会话时区?

在将Java Date写入SQL TIMESTAMP列之前, JDBC是否将日期从Java虚拟机时区转换为数据库会话的日期? 例如,假设Java虚拟机时区为UTC且数据库会话时区为UTC-5 。 如果Java程序通过将其传递给PreparedStatement#setTimestamp(int, Timestamp)来尝试存储2000-01-01 00:00:00 ,则根据JDBC标准,数据库将存储TIMESTAMP ‘2000-01-01 00:00:00’或TIMESTAMP ‘1999-12-31 19:00:00’ ?

通过JDBC调用Sybase存储过程时的空结果集

我正在调用一个Sybase存储过程,它通过JDBC返回多个结果集。 我需要获取一个具有名为“Result”的列的特定结果集这是我的代码: CallableStatement cs = conn.prepareCall(sqlCall); cs.registerOutParameter(1, Types.VARCHAR); cs.execute(); ResultSet rs=null; int count = 1; boolean flag = true; while (count < 20000 && flag == true) { cs.getMoreResults(); rs = cs.getResultSet(); if (rs != null) { ResultSetMetaData resultSetMetaData = rs.getMetaData(); int columnsCount = resultSetMetaData.getColumnCount(); if (resultSetMetaData.getColumnName(1).equals("Result")) { // action code resultset found flag = […]

Apache Commons DbUtils的替代轻量级JDBC帮助库

我刚刚开发了自己的小型JDBC帮助程序库,我已经意识到它将成为一个维护噩梦。 我不是在寻找一个完整的ORM,比如Hibernate,只是一些轻松而有用的东西可以快速地使JDBC调用传递SQL语句而不会弄乱已检查的exception,手动关闭资源等等…… 从您的经验中,您能推荐一个不错的JDBC帮助程序库吗? 到目前为止,我已经看过Apache Commons DbUtils了 ,看起来还不错。 还有其他想法吗?

JDBC的难倒SQLexception

我正在尽我所能让JDBC工作,现在唯一困扰我的是这个例外,我不知道: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘????????????????’ at line 1 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.java:1890) com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3523) com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2386) com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2163) com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:794) com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:374) com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) java.sql.DriverManager.getConnection(libgcj.so.10) java.sql.DriverManager.getConnection(libgcj.so.10) 我用它连接…… Class.forName(“com.mysql.jdbc.Driver”); DriverManager.getConnection(“jdbc:mysql://localhost:3306/mysql”, “username”, “password”); 非常感谢!

MySQL中的MySQL插入语句的性能:批处理模式预处理语句与具有多个值的单个插入

我正在设计一个MySQL数据库,它需要在各种InnoDB表中每秒处理大约600行插入。 我当前的实现使用非批处理的预准备语句。 但是,写入MySQL数据库的瓶颈和我的队列大小会随着时间的推移而增加。 该实现是用Java编写的,我不知道该版本是否有用。 它使用MySQL的Java连接器 。 我需要考虑明天切换到JDBC 。 我假设这是两个不同的连接器包。 我已经在这个问题上阅读了以下主题: 优化MySQL插入以处理数据流 MyISAM与InnoDB 将二进制数据插入MySQL(没有PreparedStatement) 并从mysql网站: http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html 我的问题是: 有人在批处理模式下使用INSERT与预准备语句相比,使用具有多个VALUE的单个INSERT语句,是否有任何关于性能差异的建议或经验。 MySQL Java连接器与JDBC之间的性能差异是什么? 我应该使用其中一个吗? 这些表用于存档目的,并且将看到约90%写入〜10%读取(甚至可能更少)。 我正在使用InnoDB。 这是MyISAM的正确选择吗? 预先感谢您的帮助。

在Oracle数据库中持久处理并发请求?

我有这个场景,在航空公司网站上(使用Java)两个独立的客户同时发送两个请求预订同一航空公司的同一个座位 从纽约到芝加哥。 我正在使用oracle数据库并且已提交隔离级别。 我的问题是oracle数据库是否提供了处理这种并发场景的任何解决方案? 我所知道的是,当第一个事务DML语句被触发时,它将在受影响的行上获得锁定,并在事务完成时释放,即在发出回滚或commit时发布。但是一旦提交完成,第二个请求将在第一个完成后立即继续并将覆盖第一个。 所以它没有帮助? 在Java中是的我可以处理将我的db类作为单例并在正在执行更新的方法上使用synchronized关键字。 但是想要知道我们在数据库级别本身是否存在这种问题?可序隔离级别可以帮助。 但不确定?

如何使用JDBC从存储过程中获取* everything *

使用JDBC处理SQL Server存储过程时,偶尔会遇到两种奇怪的行为: 问题1:我在SQL Server Management Studio(SSMS)中运行存储过程并返回结果集。 但是,当我尝试 try (CallableStatement cs = conn.prepareCall(“{call dbo.TroublesomeSP}”)) { ResultSet rs = cs.executeQuery(); 我得到了例外 com.microsoft.sqlserver.jdbc.SQLServerException:该语句未返回结果集。 问题2:我在SSMS中运行存储过程并引发错误,但是当我使用JDBC来.execute存储过程时,不会抛出任何exception。 为什么会出现这些问题?如何避免这些问题?

ORA-12514:TNS:监听器当前不知道连接描述符中请求的服务

我在尝试通过监听器连接到Oracle数据库XE时遇到问题: sqlplus system/my_password@XE 我收到以下错误: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor 我使用的是Ubuntu 12.10和Oracle Express Edition 11g。 我的主要目标是使用jdbc连接java + oracle db,但是我得到了同样的错误。 这是我的listener.ora # listener.ora Network Configuration File: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS […]

如何在Java中使用预处理语句进行select查询?

我曾多次尝试使用预处理语句,但它返回SQLexception。 这是我的代码: public ArrayList name(String mobile, String password) { ArrayList getdata = new ArrayList(); PreparedStatement stmt = null; try { String login = “select mobile, password from tbl_1 join tbl_2 on tbl_1.fk_id=2.Pk_ID where mobile=? and password=?”; String data = “select * from tbl_2 where password='” + password + “‘”; PreparedStatement preparedStatement = conn.prepareStatement(login); preparedStatement.setString(1, mobile); […]