Tag: jdbc

我应该在哪里保存JDBC连接详细信息?

我有一个带有数据库连接的Java Swing程序。 到目前为止,我的要求是硬编码连接细节,如下所示。 public void makeConnection() { try { Class.forName(“com.mysql.jdbc.Driver”); con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/dbName”,”root”,””); //System.out.println(“Connection Established”); } catch(Exception e) { e.printStackTrace(); } } 然而,客户端的IT人员试图通过VPN与数据库建立连接,系统拒绝连接,很可能是因为硬编码连接。 现在,我正在寻找以客户端可以编辑的方式存储连接数据的方法。 这意味着,像大多数一般程序一样,客户端决定数据库密码,端口等。他可能需要它bcs涉及VPN。 因此,我计划为客户端创建一个小对话框,以输入数据库密码,用户和服务器位置。 保存这些数据后,程序将读取它们并相应地建立连接。 但问题是,我在哪里保存这些? 我知道我可以将它们保存在文本文件中,但它是一种非安全的方法,任何人都可以读取它。 某种硬编码不是一种选择,因为客户端应该能够编辑他的密码等。 任何建议?

如何访问源文件夹中的Jar文件?

在我的Java项目中,我使用的是H2内存数据库,我必须在初始化应用程序时加载JDBC驱动程序。 我想/需要动态加载H2 .jar文件,所以我执行以下操作: String classname = “org.h2.Driver”; URL u = new URL(“jar:file:libs/h2.jar!/”); URLClassLoader ucl = new URLClassLoader(new URL[] { u }); Driver d = (Driver) Class.forName(classname, true, ucl).newInstance(); DriverManager.registerDriver(new DriverShim(d)); 当我将H2 .jar文件放入我的Java源代码文件夹之外的“libs”文件夹中时(也就是说,在Eclipse中,这个“libs”目录与“src”文件夹处于同一级别),那么这种方法工作正常。 但是,不幸的是,我必须将这个H2 .jar文件放入源代码文件夹树中的文件夹中,但是在主类文件夹下面。 例如,我的Java包结构在Eclipse中如下所示: /src/my/app/MyApp.java // main class of my application /src/my/app/sub/package/h2.jar // how to access this? /libs/h2.jar // loading from here works 我知道这是愚蠢的,但不幸的是我必须使用这个奇怪的设置。 […]

Oracle ResultSetMetaData getPrecision / getScale

我使用Oracle的JDBC瘦驱动程序(10.2.0.3)连接到Oracle 10g数据库。 我想获得有关数据库列的信息,因此我使用ResultSetMetaData 。 我需要的最重要的信息是列的类型和长度,所以我使用getColumnType , getPrecision和getScale方法。 如果列类型为“简单”,如VARCHAR2(50), NUMBER(5), NUMBER(6,2)它适用于简单查询( select * from tablename VARCHAR2(50), NUMBER(5), NUMBER(6,2) 。 如果我有一个更复杂的查询( select count(*) from tablename )或基于包含一些复杂计算的视图的查询,这些方法会产生奇怪的结果,如: getScale :-127 getPrecision和getScale都是0 getPrecision :-1 将oracle.jdbc.J2EE13Compliant连接属性设置为true (由几个网页建议)会消除getScale = -127,但仍会返回0/0结果。 我很可能必须为这些奇怪的结果创建一个解决方法,但首先我至少需要一个关于Oracle的ResultSetMetaData行为的综合文档。 例如,对于所有SQL类型而言,具有getPrecision / getScale含义的巨大表将是很棒的。 某处有这样的文档吗?

在网络应用程序中放置META-INF / services / java.sql.Driver的位置

javadoc说“要加载my.sql.Driver类,META-INF / services / java.sql.Driver文件将包含条目:my.sql.Driver”。 Web应用程序通常没有META-INF文件夹作为WEB-INF的兄弟吗? 但是,JPA规范正在WEB-INF / classes / META-INF /中寻找persistence.xml。 哪个地方对于services / java.sql.Driver是正确的? 顺便说一句,我在这两个地方都得到了“No suitable Driver”例外。

JDBC没有执行SHOW DATABASES命令

我想得到一个存储在mysql中的数据库列表,并通过结果集使用命令“show databases”放入java表中。 但它不起作用。 DefaultTableModel model=(DefaultTableModel)dbTbl.getModel(); try{ Class.forName(“com.mysql.jdbc.Driver”); Connection con=DriverManager.getConnection(“jdbc:mysql//localhost/:3306″,”root”,”password”); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery(“show databases;”); while(rs.next()) { String db=rs.getString(1); model.addRow(new Object[] {db}); } rs.close(); stmt.close(); con.close(); } catch(Exception e) { JOptionPane.showMessageDialog(null,”nahi chalda”); }

JDBC Hibernate – Mysql连接错误

我的Ubuntu 11.10桌面上有一个本地mysql服务器。 hostname = localhost; username = root; 密码= root; 数据库名称= CBS。 我真的很困惑,因为当我使用terminal , mysql administrator和mysql query browser访问mysql时,我使用上面提到的那些身份validation,一切都很好。 我的问题是当我在Java App中配置我的jdbc.properties时,我收到此错误: org.springframework.web.util.NestedServletException:请求处理失败; 嵌套exception是org.springframework.jdbc.UncategorizedSQLException:Hibernate操作:无法打开连接; 未分类的SQL的SQLException [???]; SQL状态[28000]; 错误代码[1045]; 用户’root’@’localhost’访问被拒绝(使用密码:YES); 嵌套exception是java.sql.SQLException:用户’root’@’localhost’拒绝访问(使用密码:YES) 我的配置文件jdbc.properties: jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/CBS jdbc.username=root jdbc.password=root 顺便说一句,我将使用本地服务器的原因是因为我们的主服务器关闭所以我必须使用我的本地mysql继续我的项目。 请帮帮我…先谢谢。

SQL更新语句的Java单工作线程

我正在研究一个基于Java的服务器,我将在其中拥有多个线程(每个连接用户一个线程+一些额外的线程)。 将涉及一些数据库连接,所以我想每次服务器对数据库进行SELECT查询时,它将为此启动一个新线程,以防止阻塞当前线程。 我打算为此使用连接池,我想我知道如何做到这一点。 (我已经研究过C3P0 )但是,也会涉及很多UPDATE语句,但是这些语句直接运行并不重要,这里有延迟。 因为可能有很多UPDATE语句,所以我想为所有UPDATE语句设置一个工作线程。 在我看来,这将具有能够重用PreparedStatement -objects的优势 问题:我如何从其他线程告诉UPDATE -worker线程运行一些语句? 我知道multithreading以及如何使用synchronized块让线程彼此“交谈”,但是随着涉及的数据库,它突然感觉更复杂。 我已经读过不应该在线程之间共享准备好的语句和连接。 我现在就如何解决它的想法:(感觉不是一个好的解决方案) 使用自定义类的LinkedBlockingQueue (或其他类型的Queue),其中包含要调用哪种UPDATE语句以及要将其发送到哪些参数的信息。 然后工作线程将在通知时从该队列中读取(当将某些内容添加到队列时),并且它将运行适当的方法,该方法将使用相应的预准备语句,设置参数并调用它。 编辑:一个不好的想法,我认为自己采用这种方法是params可能是int,String,double或者其他什么。 如何将它们存储在自定义类中? 将它们全部存储为String感觉不太好。 我是在正确的轨道上还是有更好的方法来解决这个问题?

使用Oracle数据库中的Java-JDBC读取数据时的字符编码

我们有数据存储在oracle 10g db中,其中包含法语字符集。 要求是使用Java读取数据并生成输出文件。 我通过SQL * plus检查了Oracle数据库中数据的有效性,看起来很不错。 来自windows: set NLS_LANG=AMERICAN.AL32UTF8 sqlplus scott/tiger sql> select billing_address from MYTABLE t where ADDRESS_ID=1 ; billing_address ———————– MONTRÉAL QUÉ 现在,当我从Java读取表格以生成输出文件时,该字符都是乱码,我看到问号代替É。 当我尝试使用Java读取/写入数据时,是否需要设置任何特殊编码。 我使用ojdbc14.jar并将编码设置为UTF-8。 更新 :这是我的java代码片段。 Charset cs1 = Charset.forName(“UTF-8”); PreparedStatement pStmt = conn.prepareStatement(“select * from talbe where address_id=1”); ResultSet rs = pStmt.executeQuery(); Writer w = null; FileOutputStream fos = null; […]

DatabaseMetaData.getColumns返回同义词的空ResultSet

元数据上的方法getColumns()返回一个空的ResultSet用于同义词(对于表和视图,它正确地返回列列表)。 这种情况发生在Oracle 11g Express上并使用最新的Oracle JDBC驱动程序(11.2.3)。 这也适用于其他SQL服务器吗? 欢迎任何帮助/想法来解决这个问题。

JDBC中的Java类型为Postgres ltree

有谁知道什么Java类型映射到Postgres ltree类型? 我像这样创建一个表: CREATE TABLE foo (text name, path ltree); 几个插页: INSERT INTO foo (name, path) VALUES ( ‘Alice’, ‘ROOT.first.parent’); INSERT INTO foo (name, path) VALUES ( ‘Bob’, ‘ROOT.second.parent’); INSERT INTO foo (name, path) VALUES ( ‘Ted’, ‘ROOT.first.parent.child’); INSERT INTO foo (name, path) VALUES ( ‘Carol’, ‘ROOT.second.parent.child’); 没什么奇怪的。 现在我想使用PreparedStatment批量处理它: public final String INSERT_SQL = “INSERT […]