在我的代码我正在使用java.sql.PreparedStatement.
然后我执行该setString()方法来填充预准备语句的通配符.
在executeQuery()调用方法并执行查询之前,有没有办法检索(并打印出)最终查询?我只想将其用于调试目的.
我正在使用Android Studio [Android Studio 北极狐 | 2020.3.1 补丁1]
My room library version is [2.3.0]
Used Gradle version [7.0.1]
Also added kapt 'org.xerial:sqlite-jdbc:3.36.0.1'
Caused by: java.lang.Exception: No native library is found for os.name=Mac and os.arch=aarch64. path=/org/sqlite/native/Mac/aarch64 at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:333) at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:64) at androidx.room.verifier.DatabaseVerifier.<clinit>(DatabaseVerifier.kt:71)
Run Code Online (Sandbox Code Playgroud)
如何解决这个错误?
解决方案 使用 Room 版本:2.4.0-alpha03 或更高版本。
我有一个通用的Java方法,具有以下方法签名:
private static ResultSet runSQLResultSet(String sql, Object... queryParams)
Run Code Online (Sandbox Code Playgroud)
它打开一个连接,PreparedStatement使用sql语句和queryParams变量长度数组中的参数构建一个,运行它,缓存ResultSet(在a中CachedRowSetImpl),关闭连接,并返回缓存的结果集.
我在记录错误的方法中有异常处理.我将sql语句记录为日志的一部分,因为它对调试很有帮助.我的问题是记录String变量会sql使用?而不是实际值记录模板语句.我想记录已执行(或尝试执行)的实际语句.
那么......有没有办法获得将由a运行的实际SQL语句PreparedStatement?(没有自己构建它.如果我找不到访问PreparedStatement'sSQL的方法,我可能最终会自己构建它catch.)
我有一个包含日期的数据库表
(`date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00').
Run Code Online (Sandbox Code Playgroud)
我正在使用MySQL.从程序中,有时数据会在没有日期的情况下传递到数据库.因此,日期值被自动分配给0000-00-00 00:00:00
调用表数据时,它会给出错误的日期列
...'0000-00-00 00:00:00' can not be represented as java.sql.Timestamp.......
Run Code Online (Sandbox Code Playgroud)
我尝试将空值传递给插入数据的日期,但它会分配给当前时间.
有没有什么方法可以在ResultSet不改变表结构的情况下得到它?
我在Windows 7 64位操作系统中安装了Oracle 11g Express Edition Release 2并试图执行JDBC程序,然后出现以下错误:
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28)
at Lab3O.main(Lab3O.java:15)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
... 8 …Run Code Online (Sandbox Code Playgroud) 可能吗?我可以在连接URL上指定它吗?怎么做?
我有一种方法可以使用JDBC从数据库中获取用户:
public List<User> getUser(int userId) {
String sql = "SELECT id, name FROM users WHERE id = ?";
List<User> users = new ArrayList<User>();
try {
Connection con = DriverManager.getConnection(myConnectionURL);
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, userId);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
users.add(new User(rs.getInt("id"), rs.getString("name")));
}
rs.close();
ps.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return users;
}
Run Code Online (Sandbox Code Playgroud)
我应该如何使用Java 7 try-with-resources来改进此代码?
我已尝试使用下面的代码,但它使用了许多try块,并且不会提高可读性.我应该try-with-resources以其他方式使用吗?
public List<User> getUser(int userId) {
String sql = "SELECT id, name …Run Code Online (Sandbox Code Playgroud) 我需要找到我的MySQL用户名.当我打开MySQL命令行客户端时,它只询问我的密码.我不记得我的用户名了.为了与JDBC连接,我需要URL,主机和端口号.我在哪里可以找到所有这些?
我花了太多时间在连接一些JNDI工厂bean时试图找出一些错误.结果问题是,而不是......
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/loc"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
我其实写了这个......
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/loc"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
我推断java:comp/env /可能引用了一些环境变量,并最终使我的上下文文件被查看.唯一的区别是java:comp/env /.从专家的口中,这是做什么的?
如果没有值中的java:comp/env前缀,我将收到一条错误,指出"Name jdbc未绑定在此Context中".
我知道PreparedStatements避免/阻止SQL注入.它是如何做到的?使用PreparedStatements构造的最终表单查询是字符串还是其他?