关于数据库查询值的调用问题
本帖最后由 ty4z2008 于 2013-06-09 00:45:47 编辑
MySQL JDBC Java
package jw;
import java.sql.*;
public class Jw {
public static void main(String[] args) {
String url = "jdbc:oracle:thin:@host:1521:test1"; //test为自己数据库的名字,1521为端口
String username = "user";
String password = "pass";
String driver = "oracle.jdbc.driver.OracleDriver";
try {
Class.forName(driver); //加载驱动
Connection conn = DriverManager.getConnection(url, username,
password); //连接数据库
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM JW.XJ_XJB"); // 预处理命令,比Statement 好一些
ResultSet rs = pstmt.executeQuery();
while(rs.next())
{
System.out.println(rs.getString(1));
}
pstmt.close(); //关闭连接
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("-------- MySQL JDBC Connection Testing ------------");
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your MySQL JDBC Driver?");
e.printStackTrace();
return;
}
System.out.println("MySQL JDBC Driver Registered!");
String myurl = "jdbc:mysql://localhost:3306/test";
String user = "user";
String pwd = "pass";
Connection connection = null;
String sql = null;
Statement stmt = null;
//ResultSet rs = null;
try {
connection = DriverManager
.getConnection(myurl,user,pwd);
stmt = connection.createStatement();
//我要在这里获取上面ResultSet rs = pstmt.executeQuery(); 的rs.getString(1)数据应该如何获取?
sql = "INSERT INTO XJ_XJB(XH,XM) VALUES($1,$2)";
int rs = stmt.executeUpdate(sql);
System.out.println("mysql ok");
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
return;
}
if (connection != null) {
System.out.println("You made it, take control your database now!");
//System.out.println(tmp);
} else {
System.out.println("Failed to make connection!");
}
}
}
[解决办法]
rs.getString(1),是什么类型的数据就用什么函数。
有getInt()……
[解决办法]
获取不到,
1你之前开启的connect作用域在那个花括号中已经结束了
2里面的数据随着你的关闭也已经没有了
你要理解一个概念:当你关闭connect这个东西时候整此链接动作都已经结束就算你没有手动关闭,它的一切PreparedStatement和resultSet也自动关闭了,这也是为什么网上你看到的有些代码写的不严谨的只关闭connect其实只要不出意外这样也算的上是安全,如果想要用之前的查询数据就只能做记录。
此外给你几个建议:
1Class.forName(driver); 这种东西拿到外面的静态语句块里吧
2Connection Statement ResultSet这些东西用完一定要记得关闭啊,你下面就没关闭,而且上面的关闭不严谨,比如最严谨的当然是从resultset到Statement最后到connection一层一层的关闭期间每次关闭都用try{}catch(Exception e){}finally{}来嵌套,关闭前判断一下是不是空什么的