`

java操作Mysql数据库

阅读更多
用数据库这么长时了,一些类用的类竟然还没搞明白哎,所以就把代码贴出来吧


public class DBUtils {

	Connection conn = null;
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "com.mysql.jdbc.Driver";
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/t" ; //和本机mysql中名为t的数据库取得连接
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ; 
	// MySQL数据库的连接密码
	public static final String DBPASS = "tian" ;

	public  Connection getConnection() {
		try {
			//加载驱动
			Class.forName(DBDRIVER);
			//取得连接
		    conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
		} catch (Exception e){ 
			e.printStackTrace();
		}
		return conn;
	}

}


执行sql语句的代码
		  //向数据库中插入数据
		  
		  Connection conn = new DBUtils().getConnection();
		  String sql = "INSERT into t (name,sex,age) values ('"+user+"',"+sex+","+age+")";
		  java.sql.Statement sm = conn.createStatement();
//		  ResultSet rs = sm.executeQuery(sql);// 查询结果存入rs
	      sm.execute(sql);//执行  



至于PreparedStatement和statement的区别简单的话:
1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得, preparedstatement支持批处理

刚才看到一篇不错的详细讲解,等会再单独转一篇吧

而sm.executeQuery(sql)和sm.exceute(sql)的区别为:
executeQuery(sql)方法在JDK1.6中的解释为:
executeQuery
ResultSet executeQuery(String sql)
                       throws SQLException执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。

参数:
sql - 要发送给数据库的 SQL 语句,通常为静态 SQL SELECT 语句
返回:
包含给定查询所生成数据的 ResultSet 对象;永远不能为 null
抛出:
SQLException - 如果发生数据库访问错误,在已关闭的 Statement 上调用此方法,或者给定 SQL 语句生成单个 ResultSet 对象之外的任何其他内容


execute(sql)方法在JDK1.6中的解释为:
execute
boolean execute(String sql)
                throws SQLException执行给定的 SQL 语句,该语句可能返回多个结果。在某些(不常见)情形下,单个 SQL 语句可能返回多个结果集合和/或更新计数。这一点通常可以忽略,除非正在 (1) 执行已知可能返回多个结果的存储过程或者 (2) 动态执行未知 SQL 字符串。
execute 方法执行 SQL 语句并指示第一个结果的形式。然后,必须使用方法 getResultSet 或 getUpdateCount 来获取结果,使用 getMoreResults 来移动后续结果。


参数:
sql - 任何 SQL 语句
返回:
如果第一个结果为 ResultSet 对象,则返回 true;如果其为更新计数或者不存在任何结果,则返回 false
抛出:
SQLException - 如果发生数据库访问错误,或者在已关闭的 Statement 上调用此方法
另请参见:
getResultSet(), getUpdateCount(), getMoreResults()


关于接口 ResultSet

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。

默认的 ResultSet 对象不可更新,仅有一个向前移动的光标。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。可以生成可滚动和/或可更新的 ResultSet 对象。以下代码片段(其中 con 为有效的 Connection 对象)演示了如何生成可滚动且不受其他更新影响的可更新结果集。有关其他选项,请参见 ResultSet 字段。


       Statement stmt = con.createStatement(
                                      ResultSet.TYPE_SCROLL_INSENSITIVE,
                                      ResultSet.CONCUR_UPDATABLE);
       ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
       // rs will be scrollable, will not show changes made by others,
       // and will be updatable



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics