LCL-Android-Example: Now creating tables works.

git-svn-id: trunk@39431 -
This commit is contained in:
sekelsenmat 2012-12-02 13:27:48 +00:00
parent c05d327706
commit 8713e20438
3 changed files with 59 additions and 28 deletions

View File

@ -2,16 +2,16 @@ object formSqlite: TformSqlite
Left = 119 Left = 119
Height = 240 Height = 240
Top = 244 Top = 244
Width = 320 Width = 257
Caption = 'formSqlite' Caption = 'formSqlite'
ClientHeight = 240 ClientHeight = 240
ClientWidth = 320 ClientWidth = 257
LCLVersion = '1.1' LCLVersion = '1.1'
object Button1: TButton object Button1: TButton
Left = 8 Left = 8
Height = 25 Height = 25
Top = 8 Top = 24
Width = 75 Width = 112
Caption = 'Connect' Caption = 'Connect'
OnClick = Button1Click OnClick = Button1Click
TabOrder = 0 TabOrder = 0
@ -19,8 +19,9 @@ object formSqlite: TformSqlite
object DBEdit1: TDBEdit object DBEdit1: TDBEdit
Left = 8 Left = 8
Height = 23 Height = 23
Top = 104 Top = 88
Width = 80 Width = 80
DataField = 'FirstFieldStr'
DataSource = SqliteDatasource DataSource = SqliteDatasource
CharCase = ecNormal CharCase = ecNormal
MaxLength = 0 MaxLength = 0
@ -29,7 +30,7 @@ object formSqlite: TformSqlite
object DBNavigator1: TDBNavigator object DBNavigator1: TDBNavigator
Left = 8 Left = 8
Height = 25 Height = 25
Top = 64 Top = 56
Width = 241 Width = 241
BevelOuter = bvNone BevelOuter = bvNone
ChildSizing.EnlargeHorizontal = crsScaleChilds ChildSizing.EnlargeHorizontal = crsScaleChilds
@ -44,8 +45,17 @@ object formSqlite: TformSqlite
Options = [] Options = []
TabOrder = 2 TabOrder = 2
end end
object btnCreateDB: TButton
Left = 136
Height = 25
Top = 24
Width = 113
Caption = 'Create DB'
OnClick = btnCreateDBClick
TabOrder = 3
end
object SqliteDatasource: TDatasource object SqliteDatasource: TDatasource
left = 144 left = 136
top = 16 top = 88
end end
end end

View File

@ -14,9 +14,11 @@ type
TformSqlite = class(TForm) TformSqlite = class(TForm)
Button1: TButton; Button1: TButton;
btnCreateDB: TButton;
SqliteDatasource: TDatasource; SqliteDatasource: TDatasource;
DBEdit1: TDBEdit; DBEdit1: TDBEdit;
DBNavigator1: TDBNavigator; DBNavigator1: TDBNavigator;
procedure btnCreateDBClick(Sender: TObject);
procedure Button1Click(Sender: TObject); procedure Button1Click(Sender: TObject);
private private
{ private declarations } { private declarations }
@ -45,12 +47,30 @@ var
begin begin
{$ifdef CPUARM} {$ifdef CPUARM}
sqlitedb := TSqliteJNIDataset.Create(Self); sqlitedb := TSqliteJNIDataset.Create(Self);
//SqliteDatasource.DataSet := sqlitedb;
sqlitedb.FileName := '/sdcard/database.db'; sqlitedb.FileName := '/sdcard/database.db';
sqlitedb.TableName := 'TestTable'; sqlitedb.TableName := 'TestTable';
sqlitedb.FieldDefs.Add('FirstFieldStr', ftString); sqlitedb.FieldDefs.Add('FirstFieldStr', ftString);
sqlitedb.FieldDefs.Add('SecondFieldInt', ftInteger); sqlitedb.FieldDefs.Add('SecondFieldInt', ftInteger);
sqlitedb.Open(); sqlitedb.Open();
SqliteDatasource.DataSet := sqlitedb;
{$endif}
end;
procedure TformSqlite.btnCreateDBClick(Sender: TObject);
{$ifdef CPUARM}
var
sqlitedb: TSqliteJNIDataset;
{$endif}
begin
{$ifdef CPUARM}
sqlitedb := TSqliteJNIDataset.Create(Self);
//SqliteDatasource.DataSet := sqlitedb;
sqlitedb.FileName := '/sdcard/database.db';
sqlitedb.TableName := 'TestTable';
sqlitedb.FieldDefs.Add('FirstFieldStr', ftString);
sqlitedb.FieldDefs.Add('SecondFieldInt', ftInteger);
sqlitedb.CreateTable();
sqlitedb.Free;
{$endif} {$endif}
end; end;

View File

@ -161,16 +161,17 @@ var
lJavaString: JString; lJavaString: JString;
begin begin
DebugLn('[TSqliteJNIDataset.SqliteExec] ' + StrPas(ASQL)); DebugLn('[TSqliteJNIDataset.SqliteExec] ' + StrPas(ASQL));
{// void execSQL(String sql)
// void execSQL(String sql)
// preparations // preparations
lJavaString :=javaEnvRef^^.NewStringUTF(javaEnvRef, ASQL); lJavaString :=javaEnvRef^^.NewStringUTF(javaEnvRef, ASQL);
lParams[0].l := lJavaString; lParams[0].l := lJavaString;
// Call the method // Call the method
javaEnvRef^^.CallVoidMethodA(javaEnvRef, AndroidDB, lExecSQLMethod, @lParams[0]); javaEnvRef^^.CallVoidMethodA(javaEnvRef, AndroidDB, FSqliteDatabase_execSQL, @lParams[0]);
// clean up // clean up
javaEnvRef^^.DeleteLocalRef(javaEnvRef, lJavaString);} javaEnvRef^^.DeleteLocalRef(javaEnvRef, lJavaString);
end; end;
procedure TSqliteJNIDataset.InternalCloseHandle; procedure TSqliteJNIDataset.InternalCloseHandle;
@ -225,20 +226,6 @@ begin
FAutoIncFieldNo := -1; FAutoIncFieldNo := -1;
FieldDefs.Clear; FieldDefs.Clear;
// Create the table, if necessary
//lParams[0].l := lJavaString;
//lJavaString := javaEnvRef^^.CallVoidMethodA(javaEnvRef, AndroidDB, FSqliteDatabase_execSQL, @lParams[0]);
{db.execSQL("CREATE TABLE IF NOT EXISTS "
+ DATABASE_TABLE_USER
+ " (userID INT PRIMARY KEY, name VARCHAR(40),"
+ " birthdate DATETIME,"
+ " weight INT(3), heightInches INT, "
+ " smoking BOOLEAN DEFAULT 'FALSE',"
+ " school BOOLEAN DEFAULT 'FALSE', "
+ " reading BOOLEAN DEFAULT 'FALSE',"
+ " religion BOOLEAN DEFAULT 'FALSE',"
+ " dating BOOLEAN DEFAULT 'FALSE');");}
// Cursor c = db.query(tableName, null, null, null, null, null, null); // Cursor c = db.query(tableName, null, null, null, null, null, null);
// public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) // public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
lParams[0].l :=javaEnvRef^^.NewStringUTF(javaEnvRef, PChar(TableName)); lParams[0].l :=javaEnvRef^^.NewStringUTF(javaEnvRef, PChar(TableName));
@ -357,9 +344,23 @@ end;
procedure TSqliteJNIDataset.ExecuteDirect(const ASQL: String); procedure TSqliteJNIDataset.ExecuteDirect(const ASQL: String);
var var
vm: Pointer; // array for the parameters
lParams: array[0..2] of JValue;
lJavaString: JString;
begin begin
DebugLn('[TSqliteJNIDataset.ExecuteDirect]'); DebugLn('[TSqliteJNIDataset.ExecuteDirect] ' + ASQL);
// void execSQL(String sql)
// preparations
lJavaString :=javaEnvRef^^.NewStringUTF(javaEnvRef, PChar(ASQL));
lParams[0].l := lJavaString;
// Call the method
javaEnvRef^^.CallVoidMethodA(javaEnvRef, AndroidDB, FSqliteDatabase_execSQL, @lParams[0]);
// clean up
javaEnvRef^^.DeleteLocalRef(javaEnvRef, lJavaString);
{FReturnCode := sqlite3_prepare(FSqliteHandle, Pchar(ASQL), -1, @vm, nil); {FReturnCode := sqlite3_prepare(FSqliteHandle, Pchar(ASQL), -1, @vm, nil);
if FReturnCode <> SQLITE_OK then if FReturnCode <> SQLITE_OK then
DatabaseError(ReturnString, Self); DatabaseError(ReturnString, Self);