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

View File

@ -14,9 +14,11 @@ type
TformSqlite = class(TForm)
Button1: TButton;
btnCreateDB: TButton;
SqliteDatasource: TDatasource;
DBEdit1: TDBEdit;
DBNavigator1: TDBNavigator;
procedure btnCreateDBClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ private declarations }
@ -45,12 +47,30 @@ var
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.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}
end;

View File

@ -161,16 +161,17 @@ var
lJavaString: JString;
begin
DebugLn('[TSqliteJNIDataset.SqliteExec] ' + StrPas(ASQL));
{// void execSQL(String sql)
// void execSQL(String sql)
// preparations
lJavaString :=javaEnvRef^^.NewStringUTF(javaEnvRef, ASQL);
lParams[0].l := lJavaString;
// Call the method
javaEnvRef^^.CallVoidMethodA(javaEnvRef, AndroidDB, lExecSQLMethod, @lParams[0]);
javaEnvRef^^.CallVoidMethodA(javaEnvRef, AndroidDB, FSqliteDatabase_execSQL, @lParams[0]);
// clean up
javaEnvRef^^.DeleteLocalRef(javaEnvRef, lJavaString);}
javaEnvRef^^.DeleteLocalRef(javaEnvRef, lJavaString);
end;
procedure TSqliteJNIDataset.InternalCloseHandle;
@ -225,20 +226,6 @@ begin
FAutoIncFieldNo := -1;
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);
// 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));
@ -357,9 +344,23 @@ end;
procedure TSqliteJNIDataset.ExecuteDirect(const ASQL: String);
var
vm: Pointer;
// array for the parameters
lParams: array[0..2] of JValue;
lJavaString: JString;
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);
if FReturnCode <> SQLITE_OK then
DatabaseError(ReturnString, Self);