Questions tagged «jdbc»

JDBC(Java数据库连接)是基本的API,通过使用Java编程语言执行SQL语句,可以与SQL数据库服务器进行交互。

5
为什么我们使用数据源而不是DriverManager?
我正在阅读Java JDBC规范(版本4),并且遇到了以下语句: DataSource-此接口在JDBC 2.0可选软件包API中引入。它优于DriverManager,因为它允许有关基础数据源的详细信息对应用程序透明 我想了解的是aConnection和a之间的区别DataSource以及它为什么存在。我的意思是,上面的代码块说关于数据源的详细信息对应用程序是透明的,但是是否不会在属性文件中外部化数据库属性(如用户名,密码,URL等),然后以相同的方式使用DriverManager? 并且DataSource创建接口只是为了以一种通用的方式返回可以合并的连接吗?在Java EE中,应用程序服务器是否实现此接口,并且部署的应用程序具有对数据源而不是连接的引用?
89 java  jdbc  datasource 

16
臭名昭著的java.sql.SQLException:找不到合适的驱动程序
我正在尝试将启用数据库的JSP添加到现有的Tomcat 5.5应用程序(GeoServer 2.0.0,如果有帮助的话)。 该应用程序本身与Postgres可以很好地进行通信,因此我知道数据库已启动,用户可以访问它,所有这些好东西。我正在尝试做的是添加的JSP中的数据库查询。我已经在开箱即用的Tomcat数据源示例中使用了config示例。必需的标记库位于正确的位置-如果我只有标记库引用,则不会发生任何错误,因此它将查找那些JAR。postgres jdbc驱动程序postgresql-8.4.701.jdbc3.jar位于$ CATALINA_HOME / common / lib中。 这是JSP的顶部: <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <sql:query var="rs" dataSource="jdbc/mmas"> select current_validstart as ValidTime from runoff_forecast_valid_time </sql:query> 来自$ CATALINA_HOME / conf / server.xml的相关部分,其内部<Host>依次是<Engine>: <Context path="/gs2" allowLinking="true"> <Resource name="jdbc/mmas" type="javax.sql.Datasource" auth="Container" driverClassName="org.postgresql.Driver" maxActive="100" maxIdle="30" maxWait="10000" username="mmas" password="very_secure_yess_precious!" …

18
java.lang.ClassNotFoundException:Eclipse中的com.mysql.jdbc.Driver
代码有什么问题,调试时有很多错误。我正在为单例类编写代码以与数据库mysql连接。 这是我的代码 package com.glomindz.mercuri.util; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; public class MySingleTon { String url = "jdbc:mysql://localhost:3306/"; String dbName = "test"; String driver = "com.mysql.jdbc.Driver"; String userName = "root"; String password = ""; private static MySingleTon myObj; private Connection Con ; private MySingleTon() { System.out.println("Hello"); Con= createConnection(); …

6
Java:使用PreparedStatement将多行插入MySQL
我想使用Java一次在MySQL表中插入多行。行数是动态的。过去我在做... for (String element : array) { myStatement.setString(1, element[0]); myStatement.setString(2, element[1]); myStatement.executeUpdate(); } 我想对此进行优化,以使用MySQL支持的语法: INSERT INTO table (col1, col2) VALUES ('val1', 'val2'), ('val1', 'val2')[, ...] 但由于PreparedStatement我不知道有什么方法可以这样做,因为我事先不知道array将包含多少个元素。如果无法使用PreparedStatement,我该怎么办(仍然对数组中的值进行转义)?

5
PreparedStatement setNull(..)
Java PreparedStatement提供了显式设置Null值的可能性。这种可能性是: prepStmt.setNull(parameterIndex, Types.VARCHAR); 此调用的语义是否与使用带有null参数的特定setType时的语义相同? prepStmt.setString(null); ?

10
在JDBC中处理DATETIME值0000-00-00 00:00:00
如果尝试这样做,我会得到一个例外(见下文) resultset.getString("add_date"); 用于与包含注册日期为00:00:00的DATETIME值(DATETIME的准空值)的MySQL数据库的JDBC连接,即使我只是试图将值作为字符串而不是目的。 我通过这样做解决了 SELECT CAST(add_date AS CHAR) as add_date 哪个可行,但看起来很愚蠢……有更好的方法吗? 我的意思是,我只是想生DATETIME字符串,所以我可以解析它自己为是。 注意:这里是0000的来源:(来自http://dev.mysql.com/doc/refman/5.0/en/datetime.html) 非法的DATETIME,DATE或TIMESTAMP值将转换为适当类型(“ 0000-00-00 00:00:00”或“ 0000-00-00”)的“零”值。 具体的例外情况是: SQLException: Cannot convert value '0000-00-00 00:00:00' from column 5 to TIMESTAMP. SQLState: S1009 VendorError: 0 java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 5 to TIMESTAMP. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) …
85 java  sql  date  jdbc 

5
带语句的PreparedStatement。RETURN_GENERATED_KEYS
一些JDBC驱动程序返回的唯一方法Statement.RETURN_GENERATED_KEYS是执行以下操作: long key = -1L; Statement statement = connection.createStatement(); statement.executeUpdate(YOUR_SQL_HERE, Statement.RETURN_GENERATED_KEYS); ResultSet rs = statement.getGeneratedKeys(); if (rs != null && rs.next()) { key = rs.getLong(1); } 有没有办法做到这一点PreparedStatement? 编辑 我询问是否可以PreparedStatement通过以下情况进行相同操作的原因: private static final String SQL_CREATE = "INSERT INTO USER(FIRST_NAME, MIDDLE_NAME, LAST_NAME, EMAIL_ADDRESS, DOB) VALUES (?, ?, ?, ?, ?)"; 在USER表中有一个PRIMARY KEY …
83 java  jdbc 

8
JDBC连接失败,错误:与主机的TCP / IP连接失败
我想将Java类文件与SQL Server 2012连接。我已经使用SQL Server身份验证登录。但是我在连接中收到错误。 错误:到主机127.0.0.1的TCP / IP连接,端口1433失败。错误:“连接被拒绝:连接。请验证连接属性。确保主机上正在运行SQL Server实例并在端口上接受TCP / IP连接。请确保防火墙未阻止与该端口的TCP连接”。 我的代码- Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //1. Register your driver //2. get the connection object //Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost;databaseName=aysha","sa","admin"); Connection con = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1;databaseName=aysha","user=sa","password=admin"); //"jdbc:sqlserver://127.0.0.1:1433; Instance=SQL2008;" + "databaseName=MB;user=sa;password=123;"; //Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=aysha","sa" , "password"); //3. Prepare a statement Statement stmt = con.createStatement(); //4. Write the …
82 java  sql-server  jdbc 

6
是java.sql.Timestamp时区特定吗?
我必须将UTC dateTime存储在数据库中。 我已将特定时区中给定的dateTime转换为UTC。为此,我遵循以下代码。 我输入的日期时间是“ 20121225 10:00:00 Z”,时区是“ Asia / Calcutta”。 我的服务器/数据库(oracle)在同一时区(IST)“ Asia / Calcutta”中运行 获取此特定时区中的Date对象 String date = "20121225 10:00:00 Z"; String timeZoneId = "Asia/Calcutta"; TimeZone timeZone = TimeZone.getTimeZone(timeZoneId); DateFormat dateFormatLocal = new SimpleDateFormat("yyyyMMdd HH:mm:ss z"); //This date object is given time and given timezone java.util.Date parsedDate = dateFormatLocal.parse(date + …
81 java  oracle  date  datetime  jdbc 


14
如何模拟要测试的数据库(Java)?
我正在用Java编程,而我的应用程序正在大量使用DB。因此,对我来说重要的是能够轻松测试数据库的使用情况。 什么是DB测试?对我来说,他们应该提供两个简单的要求: 验证SQL语法。 更重要的是,根据给定情况检查数据是否正确选择/更新/插入。 那么,看来我只需要一个DB。 但是实际上,我不喜欢,因为使用数据库进行测试几乎没有困难: “只给自己一个测试数据库,这有多难?” -嗯,在我的工作场所,拥有个人测试数据库几乎是不可能的。您必须使用每个人都可以访问的“公共”数据库。 “这些测试肯定不会很快...”-DB测试往往比常规测试慢。进行缓慢的测试真的不理想。 “此程序应处理任何情况!” -在数据库中尝试模拟每种情况变得有些烦人,甚至是不可能的。对于每种情况,都应进行一定数量的插入/更新查询,这很烦人并且需要时间。 “请稍等,您怎么知道该表中有542行?” -测试的主要原则之一是能够以与测试代码不同的方式测试功能。使用数据库时,通常有一种方法可以执行某项操作,因此测试与核心代码完全相同。 因此,您可以发现测试时我不喜欢数据库(当然,在某些时候,我必须要解决这个问题,但是当我发现大多数错误是通过使用其余的测试方法)。但是我在找什么呢? 我正在寻找一种使用文件系统或虚拟内存来模拟数据库,模拟数据库的方法。我以为可能有一个Java工具/程序包,可让每个测试简单地(使用代码接口)构造一个数据库模拟,模拟表和行,SQL验证以及用于监视其状态的代码接口(而不是使用SQL) )。 您熟悉这种工具吗? 编辑:感谢您的答案!尽管我在寻找工具,但是您也向我提供了有关该问题的提示:)我将花一些时间检查您的报价,所以我现在无法确定您的答案是否令人满意。 无论如何,这是我正在寻找的更好的视图-想象一下一个名为DBMonitor的类,它的功能之一就是查找表中的行数。这是我想如何使用JUnit测试该功能的虚构代码: public class TestDBMonitor extends TestCase { @Override public void setUp() throws Exception { MockConnection connection = new MockConnection(); this.tableName = "table1"; MockTable table = new MockTable(tableName); String columnName = "column1"; ColumnType …

6
ResultSet异常-结果集开始之前
我无法从ResultSet对象获取数据。这是我的代码: String sql = "SELECT type FROM node WHERE nid = ?"; PreparedStatement prep = conn.prepareStatement(sql); int meetNID = Integer.parseInt(node.get(BoutField.field_meet_nid)); prep.setInt(1, meetNID); ResultSet result = prep.executeQuery(); result.beforeFirst(); String foundType = result.getString(1); if (! foundType.equals("meet")) { throw new IllegalArgumentException(String.format("Node %d must be of type 'meet', but was %s", meetNID, foundType)); } …
76 java  jdbc 

13
如何在Java中使用ResultSet获取行数?
我正在尝试创建一个简单的方法,该方法接收ResultSet作为参数并返回一个包含ResultSet的行数的int。这是执行此操作的有效方法吗? int size = 0; try { while(rs.next()){ size++; } } catch(Exception ex) { System.out.println("------------------Tablerize.getRowCount-----------------"); System.out.println("Cannot get resultSet row count: " + ex); System.out.println("--------------------------------------------------------"); } 我尝试了这个: int size = 0; try { resultSet.last(); size = resultSet.getRow(); resultSet.beforeFirst(); } catch(Exception ex) { return 0; } return size; 但是我说错了 com.microsoft.sqlserver.jdbc.SQLServerException: The requested …
75 java  jdbc  resultset 

5
JDBC中的命名参数
这个问题已经在这里有了答案: 在JDBC预处理语句中使用变量而不是参数索引 (3个答案) 5个月前关闭。 是否有一个名为JDBC中,而不是那些位置参数,比如@name,@city在下面的ADO.NET查询? select * from customers where name=@name and city = @city

3
我应该使用java.util.Date还是切换到java.time.LocalDate
编辑:嗯,显然这太基于观点了,所以让我尝试更精确地改写它- 在不需要向后兼容性的Java代码中使用LocalDate,LocalTime等是否有明显的警告或缺点,如果需要,它们是什么? 我正在寻找诸如“当前EE库X和Y无法与LocalDate一起正常工作”或“此非常有用的模式被LocalTime破坏”之类的问题。 (这是原始问题供参考) 在Java 8中,引入了新的时间API,即java.time.LocalDate等,但未将java.util.Date标记为已弃用。 我正在编写一个新项目,该项目不需要向后兼容。我应该只使用LocalDate,LocalDateTime等吗?与良好的旧java.util.Date相比,使用此新API有什么缺点吗? 特别是-我将主要使用JDBC。从我所看到的,JDBC可以很好地处理java.util.Date。它也适合LocalDate吗? 搜索产生了大量站点,这些站点告诉您如何从一种格式转换为另一种格式,但是对于新代码是否应使用旧API却没有明确的答案。 谢谢。
74 java  date  jdbc 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.