标签: jdbc

从java.sql.PreparedStatement获取查询

在我的代码我正在使用java.sql.PreparedStatement.

然后我执行该setString()方法来填充预准备语句的通配符.

executeQuery()调用方法并执行查询之前,有没有办法检索(并打印出)最终查询?我只想将其用于调试目的.

java jdbc prepared-statement

154
推荐指数
6
解决办法
28万
查看次数

原因:java.lang.Exception:找不到 os.name=Mac 和 os.arch=aarch64 的本机库。路径=/org/sqlite/native/Mac/aarch64

我正在使用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 或更高版本。

android jdbc android-room

151
推荐指数
5
解决办法
6万
查看次数

如何获取PreparedStatement的SQL?

我有一个通用的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.)

java sql jdbc prepared-statement

150
推荐指数
5
解决办法
23万
查看次数

'0000-00-00 00:00:00'不能表示为java.sql.Timestamp错误

我有一个包含日期的数据库表

 (`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不改变表结构的情况下得到它?

java mysql timestamp jdbc

138
推荐指数
5
解决办法
10万
查看次数

ORA-12505,TNS:监听器当前不知道连接描述符中给出的SID

我在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)

oracle jdbc

137
推荐指数
10
解决办法
61万
查看次数

135
推荐指数
7
解决办法
15万
查看次数

我应该如何在JDBC中使用try-with-resources?

我有一种方法可以使用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)

java jdbc java-7 try-with-resources

135
推荐指数
4
解决办法
10万
查看次数

如何找到我的MySQL URL,主机,端口和用户名?

我需要找到我的MySQL用户名.当我打开MySQL命令行客户端时,它只询问我的密码.我不记得我的用户名了.为了与JDBC连接,我需要URL,主机和端口号.我在哪里可以找到所有这些?

java mysql database database-connection jdbc

129
推荐指数
7
解决办法
38万
查看次数

java:comp/env /做什么?

我花了太多时间在连接一些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中".

spring factory jndi jdbc

114
推荐指数
2
解决办法
11万
查看次数

PreparedStatement如何避免或阻止SQL注入?

我知道PreparedStatements避免/阻止SQL注入.它是如何做到的?使用PreparedStatements构造的最终表单查询是字符串还是其他?

java sql sql-injection jdbc prepared-statement

111
推荐指数
4
解决办法
10万
查看次数