初学java,写了一个mysql类(增删改查)

献上代码,总结:

<span style="font-size:18px;">public class MySQL {
	private String url="jdbc:mysql://127.0.0.1/test"; //连接的是test数据库
	private String user="root";
	private String password="199624";
	private String name="com.mysql.jdbc.Driver";
	private Connection conn=null;
	public MySQL(){}</span>
url="jdbc:mysql://127.0.0.1/数据库名字";

name="com.mysql.jdbc.Driver";需要引入mysql的jar包

<span style="font-size:18px;">//连接数据库
	public void connSQL(){ 
		try{
			System.out.println("连接中...");
			Thread.sleep(1000);
		}catch(InterruptedException e){
			e.printStackTrace(); //等待时间
		}
		try{
			Class.forName(name); //制定连接类型
			conn=DriverManager.getConnection(url,user,password); //获取连接

			if(!conn.isClosed()){
				System.out.println("数据库连接成功");
			}
			else{
				System.out.println("数据库已经连接");
			}

		}catch(ClassNotFoundException e){
			System.out.println("装置JDBC/OOBC 驱动程序失败");
		}catch(SQLException e){
			System.out.println("数据库连接失败");
			e.printStackTrace();
		}
	}</span>
conn=DriverManager.getConnection(url,user,password);此处建立连接
<span style="font-size:18px;">//关闭数据库
	public void close(){
		try{
			if(conn!=null){
				conn.close(); //关闭数据库
			}
		}catch(SQLException e){
			System.out.println("无法关闭数据库");
		}

		try{
			System.out.println("数据库关闭中...");
			Thread.sleep(1000);
		}catch(InterruptedException e){
			e.printStackTrace();
			e.printStackTrace();
		}
	}</span>
<span style="font-size:18px;">/判断数据库是否关闭
	public boolean getIsClose(){
		boolean flag = false;
		try{
			flag=conn.isClosed();
		}catch(SQLException e){
			System.out.println("无法判断连接状态");
			e.printStackTrace();
		}
		if(flag){return true;}
		else{return false;}
	}</span>
Connection中的isClosed()方法能判断数据库的关闭状态,若处于关闭状态则返回true,反之则返回false

//显示数据
	public void showSQL(String sql){  //"SELECT * FROM (表名)"
		try{
			System.out.println("显示中...");
			Thread.sleep(1000);
		}catch(InterruptedException e){
			e.printStackTrace();
		}
		if(getIsClose()){System.out.println("数据库已经关闭,无法显示数据");}
		else{
			ResultSet rs=null;
			Statement stmt=null;
			try{
				stmt=conn.createStatement();
				rs=stmt.executeQuery(sql); //执行
				if(!rs.next()){
					System.out.println("无数据");   
					return;
				} //rs.next:遍历一次
				do{
					String uName=rs.getString(1);
					String uId=rs.getString(2);
					String uSex=rs.getString(3);
					System.out.println(uName+"\t"+uId+"\t"+uSex);
				}while(rs.next());
			}catch(SQLException e){
				System.out.println("无法显示数据");
				e.printStackTrace();
			} 
		}
	}
rs= stmt.executeQuery(sql) // stmt.executeQuery(sql)表示执行sql语句,并返回结果集给rs

String uId=rs.getString(1);
String uName=rs.getString(2);
String uSex=rs.getString(3);

rs.getString(int)必须要根据表中列的顺序,如:列的顺序为name,id,sex,则rs.getString(1)表示name的值,rs.getString(2)表示id的值,rs.getString(3)表示sex的值

PS:结果集不为空时,rs.next()返回true,并且遍历了一次(第二次执行rs.next()的时候已经是下一组数据了)


这里说下PreparedStatement与Statement的区别(转载)

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

//查找数据(按姓名查找)
	public void seek(Student student){ <span style="font-family: georgia, verdana, Arial, helvetica, sans-seriff;">//引入一个自定义的student类</span>

		PreparedStatement pre=null;
		ResultSet rs=null;
		String name=null;
		int id=0;
		int age=0;
		if(getIsClose()){System.out.println("数据库已经关闭,无法添加数据");}
		else{
			String sql="select * from students where name=?";
			try{
				System.out.println("查找中...");
				Thread.sleep(1000);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
			try{
				pre=conn.prepareStatement(sql);
				pre.setString(1, student.getName());
				rs=pre.executeQuery(); //全部执行
				if(!rs.next()){
					System.out.println("数据不存在");  //可修改(姓名,学号)....
					return;
				} //rs.next()已经遍历了一次
				do{
					name=rs.getString(1);
					id=rs.getInt(2);
					age=rs.getInt(3);
					System.out.println(name+"\t"+id+"\t"+age);
				}while(rs.next());
				System.out.println("查找成功");
			}catch(SQLException e){
				System.out.println("查找失败");
			}
		}
	}

//添加数据   (需修改)
	public void  insert(Student student){  //引入一个自定义的student类

		PreparedStatement pre=null;
		if(getIsClose()){System.out.println("数据库已经关闭,无法添加数据");}
		else{
			String sql="insert into students(name,id,age) values(?,?,?)";
			try{
				pre=conn.prepareStatement(sql);
				//			while(true){
				pre.setString(1, student.getName());
				pre.setInt(2, student.getId());
				pre.setInt(3, student.getAge());
				pre.addBatch();
				pre.executeUpdate();   //运行
				//		    }
				System.out.println("添加成功");
			}catch(SQLException e){
				System.out.println("添加数据失败或数据已存在");
				e.printStackTrace();
			}
		}
	}
pre.addBatch(); 表示JDBC批量更新

ps:这里转一下

JDBC 批量更新 pstmt.addBatch();的问题 在数据量越大的时候 越能体现 addBatch()的优势 因为数据库的处理速度是非常惊人的 单次吞吐量很大 执行效率极高 addBatch()把若干 sql 语句装载到一起,然后一次送到数据库执行,执行需要很 短的时间 而 pstmt.executeUpdate() 是一条一条发往数据库执行的 时间都消耗在数据 库连接的传输上面 举个例子可以帮助理解: 我这有一台超大功率的面粉加工机,前者相当于 把所有农户袋装的麦子收集起 来用卡车一次送往加工厂 后者相当于农户排好队用同样的卡车一人一人的往加 工厂送麦子 麦子加工 5 分钟完成,但是每个人到工厂就得 3 小时,我数据库执 行效率再高也没用,时间都耗在传输的路上了!! 这就出现了数据传输的性能瓶颈 addBatch 就是为解决这样的问题而产生的!

//修改数据(按姓名)
	public void updateSQL(Student student){    <span style="font-family: Arial;">//引入一个自定义的student类</span>

		int rs=0;
		if(getIsClose()){System.out.println("数据库已经关闭,无法修改数据");}
		else{
			try{
				System.out.println("修改中");
				Thread.sleep(1000);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
			String sql="update students set name=? where name=?";
			PreparedStatement pre=null;
			try{
				pre=conn.prepareStatement(sql);
				pre.setString(1, student.getName1());   //修改后
				pre.setString(2, student.getName());    //修改前
				rs=pre.executeUpdate();     /
				if(rs==0){
					System.out.println("数据不存在");
					return;
				}
				System.out.println("修改成功");
			}catch(SQLException e){
				System.out.println("无法修改数据");
				e.printStackTrace();
			}
		}
	}
//删除数据(按姓名)
	public void deleteSQl(Student student){ //引入一个自定义的student类
		int rs=0;
		if(getIsClose()){System.out.println("数据库已经关闭,无法删除数据");}
		else{
			String sql="delete from students where name=?";
			PreparedStatement pre=null;
			try{
				pre=conn.prepareStatement(sql); 
				pre.setString(1,student.getName());
				rs=pre.executeUpdate(); 
				if(rs==0){
					System.out.println("数据不存在");
					return;
				}
				System.out.println("删除成功");
			}catch(SQLException e){
				System.out.println("无法删除数据");
				e.printStackTrace();
			}
		}
	}
}

第一次写技术类博客 微笑,以前都是拜读各位大神的,若有写得不好的地方请指出,虚心求教 奋斗





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值