Java на основе изучения связи Mysql Day5, JDBC

Java на основе изучения связи Mysql Day5, JDBC

Шаг JDBC соединение Mysql

1. Водитель нагрузки
2. Создать соединение
3. Получить себе
исполнение 4. SQL
5. Соединение закрыто

например

Здесь мы сначала создаем класс непосредственно, завершение вышеуказанных пяти этапов непосредственно в основной метод этого класса, реализация JDBC соединения Mysql, вызовы данных.

public static void main(String[] args) {
	// TODO Auto-generated method stub
	
	try {
		//加载驱动,其实就是通过反射创建了对象
		Class.forName("com.mysql.cj.jdbc.Driver");
		//mysql也可是sql server或者其他数据库
		//java10是数据库的名字 localhost=127.0.0.1
		//java11是数据库的名字 
		//useSSL=false表示不需要证书 
		//serverTimezone表示时区
		String url="jdbc:mysql://localhost:3306/java11?useSSL=false&serverTimezone=Asia/Shanghai";
	    //登录数据库用户名
		String username="root";
		//登录数据库密码
		String pwd="surfece2019DB";
		//这行代码就是创建连接
		Connection conn = DriverManager.getConnection(url,username,pwd);
		//创建好连接后,就可以获取Statement,Statement里有“excute~”等方法,作用是实现sql,后文会详细讲解
		Statement st=conn.createStatement();
		ResultSet rs=st.executeQuery("select * from student");
		while(rs.next()){
			System.out.println("名字"+rs.getString("name"));
			System.out.println("分数"+rs.getString("score"));
		}
		//切记要记得关闭连接
		rs.close();
		st.close();
		conn.close();	
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	
}

Приведенный выше код реализован JDBC для MySQL разъема, но не трудно найти, Есть несколько части коды можно использовать повторно, поэтому мы должны инкапсулировать, в котором несколько шагов, чтобы достичь повторного использования кода.

Код пакета

Во-первых, приведенный выше код, мы можем видеть, что нагрузка вождения 1. 5. 2. Создать соединение, чтобы закрыть соединение трех шагов фиксированы, в реальных условиях эксплуатации, нам действительно нужно изменить заявление оператора SQL и Get Она меняется. Таким образом, мы будем 1,3,5 три шага в одном классе.

public class JDBCBasic {
	public static Connection getConnection() {
		Connection conn =null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			String url="jdbc:mysql://localhost:3306/java11?useSSL=false&serverTimezone=Asia/Shanghai";
			String username="root";
			String pwd="surfece2019DB";
			conn = DriverManager.getConnection(url,username,pwd);		
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		return conn;		
	}
		
	public static void closeConn(Statement st,ResultSet rs,Connection conn) {
		if(rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(st!=null) {
			try {
				st.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}	
		if( conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		
		}
	}
}

Далее, остальные два шага, из - за различные ожидания результатов каждого вызова, используйте другой оператор SQL, в основном , добавлять, удалять, изменять, четыре. Итак , давайте создадим класс своих свойств элементов , и мы с нетерпением ждем результатов соответствующего выхода, называется выходом.
Заявление интерфейс предоставляет три метода выполнение SQL - операторов: ExecuteQuery, executeUpdate и выполнение, содержания которых способ использования операторов SQL , генерируемых решение, см использования Примечания конкретного. (В большинстве случаев: запрос с использованием excuteQuery, удаление, изменение, увеличение использования excuteUpdate)

public class Student {
	private int id; 
	private String sex;   
	private String cname; 
	private String mobile;
	private int score;
	private String name;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getCname() {
		return cname;
	}
	public void setCname(String cname) {
		this.cname = cname;
	}
	public String getMobile() {
		return mobile;
	}
	public void setMobile(String mobile) {
		this.mobile = mobile;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", sex=" + sex + ", cname=" + cname + ", mobile=" + mobile + ", score=" + score
				+ ", name=" + name + "]";
	}
}

Далее, а затем создать класс, в котором метод записи для достижения желаемых функциональных возможностей. Следующие примеры поставили четыре метода, соответствующее добавление, удаление, изменение, четыре типа SQL заявление.

public class StudentService {
	//这个方法是将sql语句查询的结果放入上面创建好的类当中
	public List<Student> getAllStudent(String sql){
		List<Student> list=new ArrayList();
		Connection conn=JDBCBasic.getConnection();
		try {
			Statement st=conn.createStatement();
			//excuteQuery用于产生单个结果集的语句,例如 SELECT 语句。
			//excuteUpdate用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
			//execute 用于执行返回多个结果集、多个更新计数或二者组合的语句。多数程序员不会需要该高级功能。
			ResultSet  rs=st.executeQuery(sql);
			while(rs.next()) {
				Student student=new Student();
				student.setName(rs.getString("name"));
				student.setId(rs.getInt("id"));
				student.setScore(rs.getInt("score"));
				student.setSex(rs.getString("sex"));
				list.add(student);
			}
			//记得关闭连接
			JDBCBasic.closeConn(st, rs, conn);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return list;
	}

	//这个方法是向表中添加数据
	public Student add(Student student) {
		Connection conn=JDBCBasic.getConnection();
		try {
			Statement st=conn.createStatement();		
			Random r=new Random();
			int id=r.nextInt(1000);
			student.setId(id);
			String sql="insert into student (id,sex,score,name) values ("+id+",'"+student.getSex()+"',"+student.getScore()+",'"+student.getName()+"')";
			st.executeUpdate(sql);
			JDBCBasic.closeConn(st, null, conn);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
		return student;
	}
	
	//这个方法是修改表中的数据
	public boolean updateNameById(String name,int id) {
		Connection conn=JDBCBasic.getConnection();
		boolean flag=false;
		try {
			Statement st=conn.createStatement();		
			String sql="update student set name='"+name+"' where id="+id;
			if(st.executeUpdate(sql)>0) {
				flag=true;
			};
			JDBCBasic.closeConn(st, null, conn);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		
		return flag;
	}
	
	//删除表中数据
	public boolean deleteByName(String name) {
		Connection conn=JDBCBasic.getConnection();
		boolean flag=false;
		try {
			Statement st=conn.createStatement();
			String sql="delete from student where name='"+name+"'";
			if(st.executeUpdate(sql)>0) {
				flag=true;
			};
			JDBCBasic.closeConn(st, null, conn);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return flag;
	}
}

тест

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StudentService ss=new StudentService();
		Student student=new Student();
		student.setName("Alex2");
		student.setScore(100);
		student.setSex("男");
		ss.add(student);
		
		ss.deleteByName("allen");
		ss.updateNameById("harry2020", 2);
		String sql="select * from student";
		List<Student> ls=ss.getAllStudent(sql);
		for(Student s:ls) {
			//打印对象,其实默认执行对象的toString方法
			//下面打印的是s.toString方法返回的结果
			System.out.println(s);
		}
	}

результат

Student [id=1, sex=, cname=null, mobile=null, score=89, name=王五]
Student [id=2, sex=, cname=null, mobile=null, score=99, name=harry2020]
Student [id=3, sex=, cname=null, mobile=null, score=79, name=张三]
Student [id=37, sex=, cname=null, mobile=null, score=100, name=Alex2]
Student [id=393, sex=, cname=null, mobile=null, score=100, name=Alex2]

Ссылки: HTTPS :? //Baike.baidu.com/item/statement/4771842 фр = Aladdin # 2

发布了5 篇原创文章 · 获赞 2 · 访问量 72

рекомендация

отblog.csdn.net/weixin_44270171/article/details/103937109