Tag: jdbc

如何在java中将Blob转换为String和String转换为Blob

我正在尝试通过使用从BLOB数据类型获取字符串 Blob blob = rs.getBlob(cloumnName[i]); byte[] bdata = blob.getBytes(1, (int) blob.length()); String s = new String(bdata); 它工作正常,但是当我要将String转换为Blob并尝试插入数据库时​​,没有任何插入数据库。 我使用下面的代码将String转换为Blob: String value = (s); byte[] buff = value.getBytes(); Blob blob = new SerialBlob(buff); 任何人都可以帮我解决在Java中将Blob转换为String和String到Blob问题吗?

为什么我们需要JDBC的连接池?

使用像DBCP或c3p0这样的JDBC连接池工具有什么好处? 如果一个用户有一个小型CRUD应用程序,我们可以创建一个连接会话作为单例吗? PS :我正在构建一个小型的javafx应用程序后端使用小型h2数据库(5个表)。

如何检查结果集是否有一行或更多行?

如何使用JDBC检查结果集是否有一行或更多行?

启用JDBC的日志记录

我试图通过在eclipse IDE中连接到Oracle数据库来使用我的JDBC程序启用日志。 我已经完成了这个SO后JDBC记录到文件,然后我创建了下面的java程序并从我的eclipse IDE运行它,但我无法看到JDBC驱动程序类生成的任何日志。 import java.io.File; import java.io.FileInputStream; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; import java.util.logging.LogManager; import java.util.logging.Logger; public class Logging { static Logger log = Logger.getLogger(Logging.class.toString()); static Connection con = null; public static void main(String[] args) throws SQLException, ClassNotFoundException { System.setProperty(“oracle.jdbc.Trace”, Boolean.TRUE.toString()); System.setProperty(“java.util.logging.config.file”, “OracleLog.properties”); log.info(“Test Message”); enableLogging(false); getConnection(); closeConnection(); } […]

如何将DataSource绑定到InitialContext以进行JUnit测试?

我正在尝试对数据库“worker”类运行JUnit测试,这些类在InitialContext上执行jndi查找以获取DataSource 。 工作类通常在Glassfish v3 App Server上运行,该服务器定义了适当的jdbc资源。 代码在App Server上部署时运行得很好,但是没有从JUnit测试环境运行,因为很明显它找不到jndi资源。 所以我尝试在测试类中设置一个InitialContext,它将数据源绑定到适当的上下文,但它不起作用。 这是我在测试中的代码 @BeforeClass public static void setUpClass() throws Exception { try { // Create initial context System.setProperty(Context.INITIAL_CONTEXT_FACTORY, “org.apache.naming.java.javaURLContextFactory”); System.setProperty(Context.URL_PKG_PREFIXES, “org.apache.naming”); InitialContext ic = new InitialContext(); ic.createSubcontext(“java:”); ic.createSubcontext(“java:/comp”); ic.createSubcontext(“java:/comp/env”); ic.createSubcontext(“java:/comp/env/jdbc”); // Construct DataSource SQLServerConnectionPoolDataSource testDS = new SQLServerConnectionPoolDataSource(); testDS.setServerName(“sqlserveraddress”); testDS.setPortNumber(1433); testDS.setDatabaseName(“dbname”); testDS.setUser(“username”); testDS.setPassword(“password”); ic.bind(“java:/comp/env/jdbc/TestDS”, testDS); DataWorker dw = […]

使用JDBC迭代大表的最快方法

我正在尝试创建一个java程序来清理和合并我的表中的行。 该表很大,大约500k行,我目前的解决方案运行速度非常慢。 我想要做的第一件事就是获取一个表示我表中所有行的对象的内存数组。 这是我正在做的事情: 一次选择1000行的增量 使用JDBC在以下SQL查询上获取结果集SELECT * FROM TABLE WHERE ID> 0 AND ID <1000 将结果数据添加到内存数组中 继续查询最多500,000,增量为1000,每次添加结果。 这已经很久了。 实际上它甚至没有超过从1000到2000的第二个增量。查询需要永远完成(尽管当我直接通过MySQL浏览器运行相同的东西时它速度相当快)。 我已经有一段时间了,因为我直接使用了JDBC。 有更快的替代方案吗?

如何使用JDBC和连接池实现DAO管理器?

我的问题如下。 我需要一个类作为Web系统中数据库连接的单点,以避免一个用户有两个打开的连接。 我需要它尽可能优化,它应该管理系统中的每个事务。 换句话说,只有该类应该能够实例化DAO。 为了使它更好,它还应该使用连接池! 我该怎么办?

如何使MS SQL Server可用于连接?

我正在尝试从Java程序连接到MS SQL Server(在我的机器上运行)。 我得到了以下冗长的例外情况: Exception in thread “main” com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: “Connection refused: connect. Verify the connection properties, check that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port, and that no firewall is blocking TCP connections […]

在Tomcat中启用Context reload =“true”时,JDBC连接池用完了连接

我正在Eclipse Juno中开发Java EE Web应用程序。 我已将Tomcat配置为使用JDBC连接池(org.apache.tomcat.jdbc.pool)以及PostgreSQL数据库。 以下是我的项目的META-INF / context.xml中的配置: 我的应用程序使用Eclipse部署到Tomcat,在Tomcat的context.xml中,属性reloadable设置为“true”,以便在检测到更改时自动重新加载Web应用程序: 我注意到,每次上面提到的自动重新加载时,都会保留10个与PostgreSQL db的连接(因为在webapp的context.xml中,initialSize =“10”)。 因此,在10次更改后抛出PSQLException: org.postgresql.util.PSQLException: FATAL: sorry, too many clients already … 如果我手动重启Tomcat – 一切都很好,只保留了10个连接。 有没有人知道解决这个问题的方法,所以有可能将reloadable设置为“true”并且每次重新加载上下文时都不会导致更多连接汇集? 非常感谢任何帮助。 PS Apache Tomcat版本7.0.32

如果存储过程在MSSQL服务器2005上的选择之前执行更新,则无结果集

有没有人知道为什么我不会得到结果集如果我在商店程序中的选择之前做更新。 我正在运行MSSQL server 2005和最新的Microsoft JDBC驱动程序。 相关的java代码: CallableStatement cstmt = con.prepareCall(“{call dbo.sp_groups_select}”); if (cstmt.execute()) { while (cstmt.getResultSet().next()) 如果存储过程如下所示,则不会获得结果集: CREATE PROCEDURE [dbo].[sp_groups_select] AS update Computers set ComputerName=’Foo’ where ComputerName=’bar’; select * from Computers; 但如果它看起来像这样我得到一个结果集 CREATE PROCEDURE [dbo].[sp_groups_select] AS select * from Computers; update Computers set ComputerName=’Foo’ where ComputerName=’bar’;