Java 連資料庫

摘要:Java 連資料庫

Java Connection example1

 

AVA利用JDBC連至SQL Server範例

//mssql範列展現了如何連結資料庫,提取資料的方法,可以參考

import java.sql.*;
class mssql {
 public static void main(String[] args) {
  //設定jdbc連結字串,請依你的SQL Server設定值修改
  String conUrl = "jdbc:sqlserver://localhost:1433;databaseName=testdb;user=sa;password=sa;"; //for jdbc 2.0
  Connection con = null;
  try {
   //註冊JODBC類
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
   con = DriverManager.getConnection(conUrl);
   //SQL語句
     String SQL = "SELECT Top 10 * FROM movie_data";
     Statement stmt = con.createStatement();
     ResultSet rs = stmt.executeQuery(SQL);
   //循環搜尋結果,請依你的資料庫來作提取資料欄位,以將下面的資料欄位對映你的資料欄位
     while (rs.next()) {
     System.out.println(rs.getString("name") + ", " + rs.getString("Source"));
     }
     rs.close();
     stmt.close();
  }
  catch (Exception ex) {
      ex.printStackTrace();
  }
 }
}
 
 

spring-jdbc 存取資料庫

JDBCDataSource dataSource = new JDBCDataSource();
dataSource.setUrl("jdbc:hsqldb:file:src/main/resources/db/dvd_library");
dataSource.setUser("codedata");
dataSource.setPassword("123456");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update("INSERT INTO directors(name) values(?)", "codedata");
 
如果查詢回來的資料對應於 JVM 中的某個物件,可以使用 queryForObject 方法。例如:
jdbcTemplate.queryForObject(
    "SELECT COUNT(*) FROM directors WHERE name=?", 
    new Object[] {"codedata"}, Integer.class)
 
如果查詢結果不只一筆,可使用 queryForList 方法,這會傳回一個 List,當中每個元素都是Map:
List<Map<String, Object>> results = 
    (List<Map<String, Object>>) jdbcTemplate.queryForList(
        "SELECT * FROM directors WHERE name=?", "codedata");
Map 中的鍵就是欄位名稱,而值的部份就是欄位值,一個取得所有查詢資料的例子像是:
for(Map<String, Object> result : results) {
    String title = (String) result.get("title");
    Integer age = (Integer) result.get("age");
    ...
}
 
如果想要 List 直接是封裝過後的資料物件,可以使用 RowMapper,進行簡單的物件封裝。例如:
List<Dvd> dvds = jdbcTemplate.query(
        "SELECT dvds.title, dvds.year, dvds.duration, "
        + "directors.name FROM dvds, directors "
        + "WHERE dvds.director_id = directors.id"
        + " ORDER BY dvds.title",
        new RowMapper<Dvd>() {
            @Override
            public Dvd mapRow(ResultSet rs, int rowNum) throws SQLException {
                return new Dvd(
                       rs.getString("title"),
                        rs.getInt("year"),
                        rs.getInt("duration"),
                        rs.getString("name")
                );
            }
        });