for(int i=1;i<=fields.size();i++)
{
String field= rs.getString(i);
JTextField tb=(JTextField)fields.get(i-1);
tb.setText(field);
} 问题可能在这里,首先你应该把变量的定义在循环外,还有就是对他进行初始化,你上面的很可能有与数据库里没有记录,而变量的定义没有执行也没有初始化,而导致你后面引用时出项空指针异常。
{
String field= rs.getString(i);
JTextField tb=(JTextField)fields.get(i-1);
tb.setText(field);
} 问题可能在这里,首先你应该把变量的定义在循环外,还有就是对他进行初始化,你上面的很可能有与数据库里没有记录,而变量的定义没有执行也没有初始化,而导致你后面引用时出项空指针异常。
单步调试显示为 rs=stmt.executeQuery("select * from " + tablename); 这行的 stmt 为null 但我不明白为什么stmt为null
在String tablename=(String)tablenames.getSelectedItem(); 后面加上如下语句也可以:
System.out.println("tablename================="+tablename);
然后去log文里面看看输出的是什么,可能是tablename没有取出值来导致的。
if (rs!=null) rs=null;
Connection conn=DriverManager.getConnection(url);
Statement stmt= conn.createStatement();
就行了 可能是连接的问题 但是 我现在还是不明白 因为在此之前的连接是好用的
{
String url="jdbc:odbc:db1";
Connection conn=DriverManager.getConnection(url);
Statement stmt= conn.createStatement();
md=conn.getMetaData();
ResultSet mrs= md.getTables(null,null,null,new String [] {"TABLE"});
while(mrs.next())
{
tablenames.addItem(mrs.getString(3));
}
mrs.close();
}你在这个代码段里的连接,对带马块之外的是不可见的,我也忽略了这一点。
所以。,呵
但是我不能把每个对数据库的操作都写编连接啊 如果不把连接写成函数还有什么方法在程序中共享这个连接吗? 数据库的连接只能写在try语句内吗?
2,不是说数据库连接非得写在try语句块内,只是因为连接过程的产生得异常需要捕获。所以你不得不
try{
..}catch(Exception e){..//处理语句}当然你不想自己处理也可以抛出异常啊:
public void xxx(xxx){
throws Exception{
...
Connection conn=DriverManager.getConnection(url);
...
}
这就不用try了
非常感谢您的回答 还又个问题想向您请教 为什么我的程序刚一执行就会调用actionPerformed 这个函数? 是不是因为窗体一打开就调用了?
package jp.co.nec.JTC;import java.sql.*;
import java.util.*;
import java.io.*;
public class JTCDBConnectionF implements Serializable{ /* 僐僱僋僔儑儞僆僽僕僃僋僩 */
protected Connection con = null; /* 僐儞僗僩儔僋僞 */
public JTCDBConnectionF() {
}
public void dbOpen() throws java.lang.Exception{
if (con == null || con.isClosed()) {
String url = "jdbc:oracle:oci8:@apsv";
String user = "scott";
String pass = "tiger";
// 僪儔僀僶偺儘乕僪
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
// 俢俛偵愙懕
con = DriverManager.getConnection(url,user,pass);
// 僩儔儞僓僋僔儑儞僞僀僾偺愝掕
con.setTransactionIsolation( con.TRANSACTION_READ_COMMITTED );
con.setAutoCommit(false); System.out.println("DB OPEN");
} else {
System.out.println("OPENED DB");
}
}
public JTCerrorF dbClose() {
try {
if (con != null && !con.isClosed()) {
//儘乕儖僶僢僋(惓忢廔椆帪偼close偡傞慜偵忋埵偱僐儈僢僩偡傞偙偲)
con.rollback();
con.close();
System.out.println("DB CLOSE");
} else {
System.out.println("CLOSED DB");
}
}
catch (SQLException se) {
// return new JTCerrorF(se.getErrorCode(),se);
return new JTCerrorF("PD05",se); //DB CLOSE
}
finally {
con = null;
}
return (JTCerrorF)null;
}
}