2016年09月

ここ(http://m-miya.blog.jp/archives/1060960478.html)にも書いたがPCのJavaの方法では、ARM64、Genymotionでうまく動かなかった。本来ならそれようのネイティヴコードを追加するべきなんだろうが、Andoidに最初から含まれているSQLiteを使うJDBCドライバあるんでそれを使ってみることにする。

追加したいプロジェクトを開いてプロジェクトのところを右クリックのメニューで"Open Module Settings"を選択して"Project Structure"ダイアログを表示する。

ダイアログの左のappを選択してDependenciesタブを選択して右の"+"を押すとメニューが出るのでLibrary dependencyを選んで"Choose Library Dependency"ダイアログを表示する。

ダイアログのテキストボックスにsqldroidと入力して検索(虫眼鏡)ボタンを押すとリストに"org.sqldroid:sqldroid:~"と出るのでそれを選んでOKボタンを押すとsqldroidが追加される。


次にプログラムの方は、Class.forNameで読み込むのを"org.sqldroid.SQLDroidDriver"にする。
getConnectionに渡す文字列を"jdbc:sqlite:"のところを"jdbc:sqldroid:"に変更すればOK。


このエントリーをはてなブックマークに追加 Clip to Evernote
ブログランキング・にほんブログ村へ
にほんブログ村

50

感じで、HBoxにButton1とButton2を入れてある状態。こんなで、Button1を非表示(setVisible(false)をする)にすると、こんな感じになる。

54
 

こんな場合、Button2は左によってほしいんだけど・・・
で、Button1をsetManaged(false)するとめでたく左による。

22

(追記)
ちょっと、書き方が不十分なようなきがしたので追記だ。
setManage(false)のところでsetVisible(false)も行わないといけない。


このエントリーをはてなブックマークに追加 Clip to Evernote
ブログランキング・にほんブログ村へ
にほんブログ村

SQLiteを使うには、まず、ここ(https://bitbucket.org/xerial/sqlite-jdbc)からSQLiteのJDBCをダウンロードする。これをプロジェクトに追加してやるとJDBC経由でSQLiteが使えるようになる。
このjarファイルには、ネイティヴコードの共有ライブラリも含まれているので、そのまんま使える。sqlite-jdbc-3.8.11.2.jarでざっくり調べてみたら、Windows10(x64)、Mac(OS X El Capitan)、Android 5.1(ARM)、6.0(x86)で動くのを確認した。AndroidのエミュレータGenymotionのAndroid6.0とSDKのエミュレータでAndroid7.0(ARM64)では動かなかった。

ちょっとしたサンプルを。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SQLiteTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:c:\\tmp\\test.db");
        
        // テーブルを作る
        Statement stmt = conn.createStatement();
        String sql =  "CREATE TABLE IF NOT EXISTS "
                + "test(id INTEGER PRIMARY KEY, name TEXT)";
        stmt.execute(sql);
        stmt.close();
        
        // データを登録
        sql =  "INSERT INTO test(id, name) VALUES(?, ?)";
        PreparedStatement preStmt = conn.prepareStatement(sql);
        for(int i = 0; i < 10; i++) {
            int j = 1;
            preStmt.setInt(j++, i);
            preStmt.setString(j++, "hoge" + i);
            preStmt.execute();            
        }
        preStmt.close();

        // 検索
        sql =  "SELECT * FROM test";
        stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        while(rs.next()) {
            System.out.println(rs.getInt("id") + ", " + rs.getString("name"));
        }
        rs.close();
        stmt.close();
        
        conn.close();
    }
}


このエントリーをはてなブックマークに追加 Clip to Evernote
ブログランキング・にほんブログ村へ
にほんブログ村

↑このページのトップヘ