JDBC连接数据的基本使用

public class LinktoSqlSever {//PrepareStatement可以使用?作为占位符,在得到结果集之前设置相应参数,为空也要使用相应的set方法,可复用
	public static final String drivername="com.microsoft.sqlserver.jdbc.SQLServerDriver";
	private static final String connurl="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=project";
	private Connection connserver;
	public void linkDatabase(){
		try {
			Class.forName(drivername);
			DriverManager.setLogStream(System.out);
			connserver=DriverManager.getConnection(connurl,"sa","sasa");
			System.out.println("successful");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public Connection getConnserver() {
		return connserver;
	}
	public void displayTabledata(ResultSet resultSet){
		try {//ResultSetMetaData用于获取有关于字段的相关信息
			ResultSetMetaData metaData=resultSet.getMetaData();
			int colcount=metaData.getColumnCount();
			for(int i=1;i<=colcount;i++){
				System.out.print(metaData.getColumnLabel(i)+" ");
			}
			System.out.println();
			while(resultSet.next()){
				for(int i=1;i<=colcount;i++){
					System.out.print(resultSet.getString(i).trim()+" ");
				}
				System.out.println();
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	//executeQuery:执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。 
	//executeUpdate:用于执行更新、删除等更新语句以及SQL DDL等建表语句
	/*execute:用于执行不确定是更新还是查找的语句,将会返回多个结果集或者更新计数
	 * 需要利用getUpdateCount、getMoreResults来进行结果集的顺序读出、确定
	 * getUpdateCount返回-1表示是结果集,否则是表示影响的行数
	 * getMoreResults进行结果集的移动,返回false表示是更新计数或者空结果集
	 * 还是需要getResultSet来获取结果集
	 */
	//知道SQL转义,利用{keyword params}形式对前面的语句进行解释
	public void insertdata(String ... sqlinset){
		Statement statement=null;
		ResultSet resultSet=null;
		try{
			statement=connserver.createStatement();
			int i=0;
			for(i=0;i<sqlinset.length-1;i++){
				statement.executeUpdate(sqlinset[i]);//执行添加语句
			}
			resultSet=statement.executeQuery(sqlinset[i]);
			displayTabledata(resultSet);//查看结果,观察是否添加成功
		}
		catch(SQLException sqlException){
			System.out.println("failed");
		}
		finally{
			try {
				resultSet.close();
				statement.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	//查询方法
	public void querydata(String querysql){
		Statement statement=null;
		ResultSet resultSet=null;
		try{
			statement=connserver.createStatement();
			resultSet=statement.executeQuery(querysql);
			displayTabledata(resultSet);
		}
		catch(SQLException ex){
		}
		finally {
			try {
				if(resultSet!=null)
					resultSet.close();
				statement.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	//修改和删除使用的方法
	public void changedata(String ...delsql){
		Statement statement=null;
		ResultSet resultSet=null;
		try{
			statement=connserver.createStatement();
			int i=0;
			for(i=0;i<delsql.length-1;i++){
				System.out.println(statement.executeUpdate(delsql[i])+"行受影响");
			}
			resultSet=statement.executeQuery(delsql[i]);
			displayTabledata(resultSet);
		}
		catch(SQLException ex){
		}
		finally {
			try {
				resultSet.close();
				statement.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	public void batchProcessByPreStatement(int []values){
		PreparedStatement pst=null;
		try {
			pst=connserver.prepareStatement("inset into J(JNO) values(?)");
			for(int i=0;i<values.length;i++){
				pst.setInt(1, values[i]);//设置?占位符的参数,当占位符为null时仍需使用相应的set方法指定类型,当传递较大数据时应使用流
				pst.addBatch();//将SQL命令加入命令列表
			}
			pst.executeBatch();//执行批量更新
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public void batchProcessByStatement(String []sqlstr){
		Statement statement = null;
		try {
			statement=connserver.createStatement();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		for(int i=0;i<sqlstr.length;i++){
			try {
				statement.addBatch(sqlstr[i]);//添加批量处理的SQL语句
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		try {
			statement.executeBatch();//执行批量的SQL语句
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	//DatabaseMetaData用于获取数据表的信息
	public void getDatabaseInfo(){
		try {
			DatabaseMetaData metaData=connserver.getMetaData();//最后一个参数为表类型
			ResultSet dbinfo=metaData.getTables(null, null, null, new String[]{"TABLE"});
			while(dbinfo.next()){
				System.out.println(dbinfo.getString("TABLE_NAME"));//获取数据库下各个表的名称
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public void disconnect(){
		if(connserver!=null){
			try {
				connserver.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值