天天看点

JDBC连接数据库(statement)

1,连接数据库之前的操作

在数据库可视化软件新建一个连接;

新建一个数据表;

在数据表创建数据

(id设置为自增长)

JDBC连接数据库(statement)

(除了statement之外,还有更好的连接方式,这里只讲基本的连接方式,如果需要了解PreparedStatement ,QueryRunner

可以到这里:再谈连接数据库 )

2,JDBC操作数据库的步骤

1.注册驱动

    告知JVM使用的是哪一个数据库的驱动

2.获得连接

   使用JDBC中的类,完成对MySQL数据库的连接

3.获得语句执行平台

  通过连接对象获取对SQL语句的执行者对象

4.执行sql语句

  使用执行者对象,向数据库执行SQL语句

  获取到数据库的执行后的结果

5.处理结果

6.释放资源  一堆close()

3,一个详细的例子

刚开始最好记得步骤

public static void main(String[] args) throws Exception {
		// 1.注册驱动 建议使用 反射技术,将驱动类加入到内容
		/*
		 * 也可以使用java.sql.DriverManager类静态方法 registerDriver(Driver driver)
		 * Diver是一个接口,参数传递,MySQL驱动程序中的实现类 DriverManager.registerDriver(new
		 * Driver()); 驱动类源代码,注册2次驱动程序(所以不建议使用)
		 */
		Class.forName("com.mysql.jdbc.Driver");// 新加入那个jar包的一个驱动类

		// 2.获得数据库连接 DriverManager类中静态方法
		// static Connection getConnection(String url, String user, String
		// password)
		// 返回值是Connection接口的实现类,在mysql驱动程序
		// url: 数据库地址 -->jdbc:mysql://连接主机IP:端口号//数据库名字
		String url = "jdbc:mysql://localhost:3306/mydatabase";
		String user = "root";
		String password = "951218";
		Connection connection = DriverManager.getConnection(url, user, password);

		// 3.获得语句执行平台, 通过数据库连接对象,获取到SQL语句的执行者对象
		// connection对象调用方法 Statement createStatement()
		// 获取Statement对象,将SQL语句发送到数据库
		// 返回值是 Statement接口的实现类对象,在mysql驱动程序
		Statement statement = connection.createStatement();

		// 4.执行sql语句
		// 通过执行者对象调用方法执行SQL语句,获取结果
		// int executeUpdate(String sql) 执行数据库中的SQL语句, insert delete update
		// 返回值int,操作成功数据表多少行
		int row = statement.executeUpdate("INSERT INTO users (username ,PASSWORD)VALUE('张xian','123') ");
		System.out.println(row);
		statement.close();
		connection.close();
	}
           

4,一个GUI案例:用户登录和注册

JDBC连接数据库(statement)
public class Main {
	public static void main(String[] args) {
		new MyJFrame();
	}
}
           
import java.sql.Connection;
import java.sql.DriverManager;

public class MyConnection {
	private static String url= "jdbc:mysql://localhost:3306/mybase";
	private static String name = "root";//数据库用户名
	private static String password = "951218";//数据库密码
	private static String driver = "com.mysql.jdbc.Driver";//驱动
	private static Connection connection;
	
	//静态块,执行一次
	static{
		try {
			Class.forName(driver);
			connection = DriverManager.getConnection(url,name,password);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection(){
		return connection;
	}
}
           
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MyJFrame extends JFrame{
	private static final long serialVersionUID = 1L;
	
	private JTextField tfNameField;//用户名
	private JTextField tfPasswordField;//密码
	private JButton entryButton ;//登录
	private JButton enrollButton;//注册
	private String name = "";
	private String password = "";
	public MyJFrame(){
		super("超级银行");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setBounds(800,100,350,190);
//		setResizable(false);
		setLayout(new GridLayout(2,1));
		Container container = getContentPane();
		
		//面板1
		JPanel panel_1 = new JPanel();
		container.add(panel_1);
		tfNameField = new JTextField(20);
		tfPasswordField = new JTextField(20);
		panel_1.add(new JLabel("用户名    "));
		panel_1.add(tfNameField);
		panel_1.add(new JLabel("用户密码"));
		panel_1.add(tfPasswordField);
		
		//面板2
		JPanel panel_2 = new JPanel();
		container.add(panel_2);
		entryButton = new JButton("登录");
		enrollButton = new JButton("注册");
		panel_2.add(entryButton);
		panel_2.add(enrollButton);
		
		//连接数据库
		Connection connection = MyConnection.getConnection();
		
		//监听
		
		//登录
		entryButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if(!isSeccess()){
					return;
				}
				//执行sql
				try {
					//一定要加引号表示字符串
					String sql = "SELECT * FROM userinfo WHERE name='" +name+ "'AND password='"+password+"'";
					Statement statement = connection.createStatement();
					boolean update = statement.execute(sql);
					if(update){
						JOptionPane.showMessageDialog(MyJFrame.this, "登录成功");
					}else {
						JOptionPane.showMessageDialog(MyJFrame.this, "用户名或密码错误");
					}
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			}
		});
		//注册
		enrollButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if(!isSeccess()){
					return;
				}
				//执行sql
				try {
					String sql  = "INSERT INTO userinfo (name,password)VALUE('" +name+ "','" +password+ "')";
					Statement statement = connection.createStatement();
					int executeUpdate = statement.executeUpdate(sql);
					if(executeUpdate == 1){
						JOptionPane.showMessageDialog(MyJFrame.this, "注册成功");
					}
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			}
		});
		
		setVisible(true);
	}
	private boolean isSeccess(){
		//收集数据
		name = tfNameField.getText();
		password = tfPasswordField.getText();
		//防护
		if(name.trim().equals("")){
			JOptionPane.showMessageDialog(MyJFrame.this, "请输入用户名");
			return false;
		}
		if(password.trim().equals("")){
			JOptionPane.showMessageDialog(MyJFrame.this, "请输入密码");
			return false;
		}
		return true;
	}
}