JDBC连接MySQL

加载及注册JDBC驱动程序

Class.forName(“com.mysql.jdbc.Driver”);
Class.forName(“com.mysql.jdbc.Driver”).newInstance();

JDBC URL 定义驱动程序与数据源之间的连接

标准语法:

<protocol(主要通讯协议)>:<subprotocol(次要通讯协议,即驱动程序名称)>:<data source identifier(数据源)>

MySQL的JDBC URL格式:

jdbc:mysql//[hostname][:port]/[dbname][?param1=value1][&param2=value2]….


示例:
   jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false

常见参数:

user                      用户名
password                  密码
autoReconnect             联机失败,是否重新联机(true/false)
maxReconnect              尝试重新联机次数
initialTimeout            尝试重新联机间隔
maxRows                   传回最大行数
useUnicode                是否使用Unicode字体编码(true/false)
characterEncoding         何种编码(GB2312/UTF-8/…)
failOverReadOnly          自动重连成功后,连接是否设置为只读(默认true)
relaxAutocommit           是否自动提交(true/false)
capitalizeTypeNames       数据定义的名称以大写表示


建立连接对象
String url=”jdbc:mysql://localhost:3306/sample_db?user=root&password=your_password”;
Connection con = DriverManager.getConnection(url);


建立SQL陈述式对象(Statement Object)

Statement stmt = con.createStatement();


执行SQL语句

// 更新操作
executeUpdate()
String upd=”insert into test (id,name) values(1001,'Tom')”;
int con=stmt.executeUpdate(upd);
execute()

//查询操作
executeQuery()
String query = “select * from test”;
ResultSet rs=stmt.executeQuery(query);

结果集ResultSet

while(rs.next()){
    rs.getString(1);
    rs.getInt(2);
}


JNDI-数据源(Data Source)与连接池(Connection Pool)

设置web.xml

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<!–<?xml version=”1.0″ encoding=”GB2312″?>–>
 
<web-app xmlns=”http://java.sun.com/xml/ns/j2ee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”
version=”2.4″>
….
<servlet>
    <servlet-name>ServletConfigurator</servlet-name>
    <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
    <init-param>
        <param-name>propertyFile</param-name>
        <param-value>WEB-INF/classes/Proxool.properties</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

后端统计端口添加下列

<servlet>
    <servlet-name>Admin</servlet-name>
    <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
 
<servlet-mapping>
    <servlet-name>Admin</servlet-name>
    <url-pattern>/Admin</url-pattern>
</servlet-mapping>
….
</web-app>

 配置Proxool.properties

jdbc-0.proxool.alias=JSPBook
jdbc-0.proxool.driver-class=com.mysql.jdbc.Driver
jdbc-0.proxool.driver-url=jdbc:mysql://localhost:3306/sample_db?user=root&password=browser&useUnicode=true&characterEncoding=UTF-8
jdbc-0.proxool.maximum-connection-count=10
jdbc-0.proxool.prototype-count=4
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
jdbc-0.proxool.verbose=true
jdbc-0.proxool.statistics=10s,1m,1d    
jdbc-0.proxool.statistics-log-level=DEBUG

使用Proxool连接池
Connection con = DriverManager.getConnection(“proxool.JSPBook”);
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String query = “SELECT * FROM employee”;
ResultSet rs = stmt.executeQuery(query);

本文地址:

 http://www.52xjava.cn/2017/10/23/jdbc-mysql-jndi-pool/

mysql中case when then 的使用

case when then end  两种写法

1.

case  字段 when 值1 then 结果1

when 值2 then 结果2

else 结果3

end

eg.

case status when ‘1’ then “在会”

when ‘0’ then “未知”

when ‘-1’ then ‘离开’

end

这个sql 可将 status为1 的 记录查询出来

2.另外 case when (表达式1)then 结果

when (表达式1) then 结果

else 结果

end

SQL> select u.id,u.name,u.sex,
  2    (case u.sex
  3      when 1 then '男'
  4      when 2 then '女'
  5      else '空的'
  6      end
  7     )性别
  8  from users u;

java中使用MD5进行加密

在各种应用系统的开发中,经常需要存储用户信息,很多地方都要存储用户密码,而将用户密码直接存储在服务器上显然是不安全的,本文简要介绍工作中常用的 MD5加密算法,希望能抛砖引玉。

对字符串进行加密

/**利用MD5进行加密
     * @param str  待加密的字符串
     * @return  加密后的字符串
     * @throws NoSuchAlgorithmException  没有这种产生消息摘要的算法
     * @throws UnsupportedEncodingException
     */
    public String EncoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{
        //确定计算方法
        MessageDigest md5=MessageDigest.getInstance(“MD5”);
        BASE64Encoder base64en = new BASE64Encoder();
        //加密后的字符串
        String newstr=base64en.encode(md5.digest(str.getBytes(“utf-8”)));
        return newstr;
    }
验证密码是否正确
对输入密码(消息报文)重新计算其摘要,和数据库中存储的摘要进行对比(即数据库中存储的其实为用户密码的摘要),若两个摘要相同,则说明密码正确,不同,则说明密码错误。

    /**判断用户密码是否正确
     * @param newpasswd  用户输入的密码
     * @param oldpasswd  数据库中存储的密码--用户密码的摘要
     * @return
     * @throws NoSuchAlgorithmException
     * @throws UnsupportedEncodingException
     */
    public boolean checkpassword(String newpasswd,String oldpasswd) throws NoSuchAlgorithmException, UnsupportedEncodingException{
        if(EncoderByMd5(newpasswd).equals(oldpasswd))
            return true;
        else
            return false;
    }