最近学java的jdbc 需要将连接保持再传递到另一个Frame中更新数据库 但试了几次都没成功。希望各位大哥大姐帮帮忙!附 :代码
public Framephone() {
……
public void foundelem(String name)
{
String str;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:addr";
con = DriverManager.getConnection(url);
Statement st = con.createStatement();
str = "select * from addrbook where name="+"'"+name+"'";
ResultSet rs = st.executeQuery(str);
if(rs.next())
{
String addr = rs.getString("addr");
String phone = rs.getString("phone");
String mobile = rs.getString("mobile");
FrameE mesinf = new FrameE(name,addr,phone,mobile,this);//用this传递
mesinf.setVisible(true);
}
else
javax.swing.JOptionPane.showInternalMessageDialog(jLabel1.getParent(),
"不存在此联系人!"); rs.close();
st.close();
con.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}public class FrameE extends JFrame {
……
public FrameE(String n,String a,String p,String m,Framephone st) {
try {
jbInit();
jLabeln.setText(n);
jTexta.setText(a);
jTextp.setText(p);
jTextm.setText(m);
this.fp = st; //保存传递过来的对象
} catch (Exception exception) {
exception.printStackTrace();
}
}
public void edit(MouseEvent e)
{
String name = jLabeln.getText();
String addr = jTexta.getText();
String phone = jTextp.getText();
String mobile = jTextm.getText();
int num = 0;
try
{
String str = "update addrbook set addr = '"+addr+"',phone ='"+phone+"',mobile='"+mobile+"' where name='"+name+"'";
num = fp.st.executeUpdate(str);//使用Statement对象 但老是抛出异常
} catch (Exception ex)
{
ex.printStackTrace();
}
if(num>0)
{
javax.swing.JOptionPane.showInternalMessageDialog(this.getParent(),"更新成功!");
}
else
javax.swing.JOptionPane.showInternalMessageDialog(this.getParent(),"更新失败!");
}
……
}
public Framephone() {
……
public void foundelem(String name)
{
String str;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:addr";
con = DriverManager.getConnection(url);
Statement st = con.createStatement();
str = "select * from addrbook where name="+"'"+name+"'";
ResultSet rs = st.executeQuery(str);
if(rs.next())
{
String addr = rs.getString("addr");
String phone = rs.getString("phone");
String mobile = rs.getString("mobile");
FrameE mesinf = new FrameE(name,addr,phone,mobile,this);//用this传递
mesinf.setVisible(true);
}
else
javax.swing.JOptionPane.showInternalMessageDialog(jLabel1.getParent(),
"不存在此联系人!"); rs.close();
st.close();
con.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}public class FrameE extends JFrame {
……
public FrameE(String n,String a,String p,String m,Framephone st) {
try {
jbInit();
jLabeln.setText(n);
jTexta.setText(a);
jTextp.setText(p);
jTextm.setText(m);
this.fp = st; //保存传递过来的对象
} catch (Exception exception) {
exception.printStackTrace();
}
}
public void edit(MouseEvent e)
{
String name = jLabeln.getText();
String addr = jTexta.getText();
String phone = jTextp.getText();
String mobile = jTextm.getText();
int num = 0;
try
{
String str = "update addrbook set addr = '"+addr+"',phone ='"+phone+"',mobile='"+mobile+"' where name='"+name+"'";
num = fp.st.executeUpdate(str);//使用Statement对象 但老是抛出异常
} catch (Exception ex)
{
ex.printStackTrace();
}
if(num>0)
{
javax.swing.JOptionPane.showInternalMessageDialog(this.getParent(),"更新成功!");
}
else
javax.swing.JOptionPane.showInternalMessageDialog(this.getParent(),"更新失败!");
}
……
}
传递Connection,应该问题不大的!
num = fp.st.executeUpdate(str);//使用Statement对象 但老是抛出异常 答:当然会出异常了。因为:fp.st这个引用值是null。
因为是用记事本写很不习惯`
希望能帮上忙,估计可能会有一两个单词错误见谅`````public class SqlHelper
{
private Connection conn;
private Statement sta;
private ResultSet rs;
public static Connection getCon()//获得连接的方法
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("jdbc:odbc:addr");
sta = conn.createStatement();
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
return conn;//返回连接对象
} public static Boolean executeSql(String sqlstring)//增删改方法你只需要传SQL语句进来即可
{
this.getCon();//得到连接
try{
sta.executeUpdate(sqlstring);
} catch (Exception ex){
ex.printStackTrace();
return false;//不成功返回假
}
return true;//执行成功返回真
} public static ResultSet executeQuery(String sqlstring)//查询方法你只需要传SQL语句进来即可
{
//打开连接
this.getCon();
try{
rs=sta.executeNonQuery(sqlstring);//执行查询
} catch (Exception ex){
ex.printStackTrace();
return null;
}
return rs;//返回语句集对象
}
public static void close()//封装好的关闭连接方法
{
try{
sta.close();
conn.close();
} catch (Exception ex){
ex.printStackTrace();
}
}
}