需求:

实现用户名和密码存入数据库。

思路:

1、连接数据表用静态加载块

2、crud写成4个静态方法

具体流程:

from:https://www.tutorialspoint.com/jdbc/jdbc-sample-code.htm

参考:

1、jdbc:http://blog.csdn.net/williamchew/article/details/51951551

2、jdbc:http://www.cnblogs.com/wuyuegb2312/p/3872607.html

3、mysql:Mysql数据库中怎样快速查询符合条件的记录是否存在

4、select 1 的含义:https://zhidao.baidu.com/question/940814605173482052.html

5、判断resultset为空:http://bbs.csdn.net/topics/60427882

代码:

jdbc

1、intellij idea添加jar包,在Project Structure的dependencies里添加。

成功添加后external libraries是这样子的:

2、写代码前的准备--创建数据表

3、尝试

// import org.gjt.mm.mysql.*; 测试package是否正确导入
import java.sql.*; public class Database {
}
public static void main(String[] args) {
try {
Class.forName("org.gjt.mm.mysql.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

Class是一个类,forName是这个类的一个静态方法。传入的string必须是某个类的全名,返回值为该类的对象。这里用这种方式加载驱动Driver的静态语句块。(为什么不可以用new Driver();的方式加载呢?)各种数据库对应的jar包、驱动类名和URL格式 补充:静态的两个特点:静态的只会在说明类的时候执行一次;不论创建多少对象静态的只有一份。

    public static void main(String[] args) {
try {
Class.forName(JDBC_DRIVER); Connection conn = DriverManager.getConnection(DB_URL, USER, PASS); // 可以理解为IO中的定位,传入URL可以推测getConnection里一定包装了关于Socket的操作 } catch (Exception e) {
e.printStackTrace();
}
}

可以观察到,不论是Driver或是Connection对象,都不是通过new来创建的。

// JDBC驱动名称和数据库位置
static final String JDBC_DRIVER = "org.gjt.mm.mysql.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/qq"; // 用户名和密码
static final String USER = "root";
static final String PASS = "pass"; public static void main(String[] args) throws SQLException {
Connection conn = null;
Statement stmt = null;
try {
Class.forName(JDBC_DRIVER); conn = DriverManager.getConnection(DB_URL, USER, PASS); // 可以理解为IO中的定位,传入URL可以推测getConnection里一定包装了关于Socket的操作 stmt = conn.createStatement();
String sql = "insert user(username, password)values('red2', 'a123456')";
System.out.println(stmt.executeUpdate(sql)); } catch (Exception e) {
e.printStackTrace();
} finally {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

升级update部分:

prep = conn.prepareStatement("insert user(username, password) values(? , ?)");
prep.setString(1, "hi");
prep.setString(2, "ss");
System.out.println(prep.executeUpdate());

融入主代码

package com.xkfx.qq.tools.serverOnly;

import com.xkfx.qq.tools.transmit.User;
import java.sql.*; public class Database {
private static final String JDBC_DRIVER = "org.gjt.mm.mysql.Driver";
private static final String DB_URL = "jdbc:mysql://localhost:3306/qq"; private static final String USER = "root";
private static final String PASS = "pass"; private static Connection conn = null; static {
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} public static void close() {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} public static void saveUser(User user) {
PreparedStatement prep = null;
try {
prep = conn.prepareStatement("INSERT USER(username, password) VALUES(? , ?)");
prep.setString(1, user.getUsername());
prep.setString(2, user.getPassword());
prep.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
prep.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} public static User get(String username) {
return null;
} public static void updateUser(User user) { } public static void removeUser(User user) {
PreparedStatement prep = null;
try {
prep = conn.prepareStatement("DELETE FROM USER WHERE username=?");
prep.setString(1, user.getUsername());
prep.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
prep.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} public static boolean find(String username) {
boolean flag = false;
PreparedStatement prep = null;
try {
prep = conn.prepareStatement("SELECT 1 FROM USER WHERE username=?");
prep.setString(1, username);
flag = prep.executeQuery().next();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
prep.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return flag;
}
}

【Java】仿真qq尝试:用户注册(三)的更多相关文章

  1. 【Java】仿真qq尝试:用户注册(二)

    参考: 1.corejavaI:使用解耦的try/catch与try/finally 2.Java中try catch finally语句中含有return语句的执行情况(总结版):http://bl ...

  2. 【Java】仿真qq尝试:用户注册(一)

    需求: 1.流程分析:客户端程序拿到用户名和密码,将用户名和密码发送到服务端(在客户端验证合法性),服务端接收并存储用户名和密码,返回给客户端一个信息(可能是成功也可能是失败.) 2.数据怎么存?服务 ...

  3. 【Java】仿真qq尝试:聊天界面 && 响应用户输入

    需求分析: 逐步完善一个“qq仿真”程序. 参考: 1.文本框与文本区:http://www.weixueyuan.net/view/6062.html 2.java布局:http://www.cnb ...

  4. Java多线程打辅助的三个小伙子

    前言 之前学多线程的时候没有学习线程的同步工具类(辅助类).ps:当时觉得暂时用不上,认为是挺高深的知识点就没去管了.. 在前几天,朋友发了一篇比较好的Semaphore文章过来,然后在浏览博客的时候 ...

  5. java高并发编程(三)

    java高并发主要有三块知识点: synchronizer:同步器,在多个线程之间互相之间怎么进行通讯,同步等: 同步容器:jdk提供了同步性的容器,比如concurrentMap,concurren ...

  6. Java NIO系列教程(三) Channel之Socket通道

    目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> 在<Java NIO系列教程(二) Ch ...

  7. java并发编程笔记(三)——线程安全性

    java并发编程笔记(三)--线程安全性 线程安全性: ​ 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现 ...

  8. java实现QQ、微信、轰炸机,撩妹,抖图功能,轻松自如

    今天交大家一个很牛的功能,让你朋友服你,他不扶你你来找我. 打游戏被骂,骂不过你来找我,我们有神器,直到他怕了为止. 废话少说,代码如下,动手,干就完了 乞丐版如下 参考连接:Java实现QQ微信轰炸 ...

  9. Java 多线程:锁(三)

    Java 多线程:锁(三) 作者:Grey 原文地址: 博客园:Java 多线程:锁(三) CSDN:Java 多线程:锁(三) StampedLock StampedLock其实是对读写锁的一种改进 ...

随机推荐

  1. yii2 basic 简洁安装教程

    虽然yii官网上说叫咱们用composer安装来安装,但是鄙人感觉这样的安装方式会将自己写的代码共享到github中,因此不太建议大家这样用.下面来给大家介绍basic简洁的安装方法. 第一步,下载b ...

  2. Sublime Text 加入右键菜单

    Sublime Text 2 是现在很受大家欢迎的编辑器了,不仅是在web前端,在书定简单的php.Js等代码时,也是相当的好用,再配合多种的插件和新颖的界面,更是让人欲罢不能. 在使用时,我们通过喜 ...

  3. Yii2 选择布局的方式

    方案1:控制器内成员变量 public $layout = false; //不使用布局 public $layout = "main"; //设置使用的布局文件 方案2:控制器成 ...

  4. (转)负载均衡,回话保持,cookie

    servlet操作cookie:http://elf8848.iteye.com/blog/253198 负载均衡,回话保持:http://www.cnblogs.com/qq78292959/arc ...

  5. cxGrid 根据列值变色(样式)

    在使用cxGrid的过程中,某一个单元格经常需要根据其他单元格的值来做相应的变色,如: 在cxGridDBTableView中,选定要变样式(如背景色.字体属性等)的列, 打开事件Events -&g ...

  6. Codeforces Round #365 (Div. 2) D.Mishka and Interesting sum

    题目链接:传送门 题目大意:给n个数,m次询问,每次询问区间 l,r 内出现偶数次数的异或和 题目思路:前缀和+离线处理+树状数组 首先可以知道, l,r 内出现奇数次的数的和,就是把 l,r内所有数 ...

  7. Codevs (3657括号序列 )

    题目链接:传送门 题目大意:中文题,略 题目思路:区间DP 这个题是问需要添加多少个括号使之成为合法括号序列,那么我们可以先求有多少合法的括号匹配,然后用字符串长度减去匹配的括号数就行 状态转移方程主 ...

  8. 烂笔头-Spring3

    1.spring相关jar包的导入 2.配置文件bean.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  9. SpringMVC 返回的 json 中去除某些不必要的属性

    修改返回的Model,在对应的属性的get方法上使用 com.fasterxml.jackson.annotation.JsonIgnore 注解即可. 如 @JsonIgnore(true) pub ...

  10. myeclipse部署web项目部署按钮无效

    找到MyEclipse的工作路径,我的是“E:\Java”,到这个目录中去“\.metadata\.plugins\org.eclipse.core.runtime\.settings”找一个含有de ...