java学习心得

JDBC 在执行execute() 方法的使用, 可以使用 stmt.getMetaData获取数据集的元数据。根据元数据的  getColumn方法,可以获取表的列数。 除了blob类型的数据,基本上都可以使用getString()  方法来获取。应为什么类型的数据都可以自动转换为 string类型。 delphi中也类似。

使用 PreparedStatement的好处:1,防止SQL注入,1个是运行比直接运行SQL语句快,1个是拼接SQL语句比较复杂,预编译可以降低编程的复杂程度。

还需要注意一点,不要用预编译语句中的占位符替代SQL中的关键字。如inset ,update 表名,列名等等。


如果要处理可更新的结果集,则使用查询语句查出来的数据通常只能来字一个数据表,而且查询结果集中的数据列必须包含主键,否则将引起更新失败。

package JDBC;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Properties;

public class ConnToMySql {
	private String driver;
	private String url;
	private String user;
	private String password;
	
	public void initParam(String paramFile) throws Exception{
		Properties props = new Properties();
		props.load(new FileInputStream(paramFile));
		driver = props.getProperty("driver");
		url = props.getProperty("url");
		user = props.getProperty("user");
		password = props.getProperty("password");
	}
	
	public int insertData(String sql) throws Exception{
		Class.forName(driver);
		try(
			Connection conn = DriverManager.getConnection(url, user, password);
			Statement stmt = conn.createStatement()
		){
		    return stmt.executeUpdate(sql);
		}
		
	}
	// 测试 execute方法
	public void testExecute(String sql) throws Exception{
		Class.forName(driver);
		int i = 9043;
		try(
			Connection conn = DriverManager.getConnection(url, user, password);
			Statement stmt = conn.createStatement();
			PreparedStatement pstmt = conn.prepareStatement("insert into teacher values(?,?)")
				){
			long start = System.currentTimeMillis();
			for(int j = 0 ; j< 200; j++){
				pstmt.setInt(1, i++);
				pstmt.setString(2, "pxb"+i);
				pstmt.executeUpdate();
			}
			System.out.println("total cost time " +( System.currentTimeMillis()-start));
			boolean isQuery = stmt.execute(sql);
			if( isQuery) 
			{
				ResultSet rs = stmt.getResultSet();
				ResultSetMetaData rsmd = rs.getMetaData();
				int columnCount = rsmd.getColumnCount();
				while (rs.next()){
					for( i = 0 ; i<columnCount; i++){
						System.out.print(rs.getString(i+1)+"\t");
					}
					System.out.println();
				}
			}else
			{
				System.out.println("该语句影响了"+ stmt.getUpdateCount());
			}
		}
	}
	public static void main(String[] args) throws Exception{
			ConnToMySql ctms = new ConnToMySql();
			// DDL使用 executeUpdate时返回0. DML返回执行的个数。
			ctms.initParam("E:/java/ConnMySql/configue/mysql.ini");
			int result = ctms.insertData("insert into teacher values(10008,'pddp');");
			System.out.print("total effect " + result + "记录");
			ctms.testExecute("create table executeTable(col_a varchar(20) primary key,col_b text )");
			ctms.testExecute("insert into executeTable values('pxb','I am a dangerous')");
			ctms.testExecute("select * from executeTable");
				
			}
	
			
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值