This snippet demonstrates how to use FoxPro JDBC Driver to read DBF file. The driver read the DBF file and generate a H2 cache in C:/Users/<UserName>/.DbSchema/jdbc-dbf-cache/
Compare to jDBF driver, this driver can read more field types such as timestamp (T) or datetime, General, Memo and more.
Download FoxPro JDBC Driver: https://dbschema.com/jdbc-drivers/FoxProJdbcDriver.zip
More info: https://dbschema.com/jdbc-driver/FoxPro.html
GitHub: https://github.com/wise-coders/dbf-jdbc-driver
[DBF] Read/Write DBF file using jDBF: https://www.b4x.com/android/forum/threads/dbf-read-write-dbf-file-using-jdbf.136728/
H2 Database: https://www.b4x.com/android/forum/threads/h2-database.132688/
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
			
			Compare to jDBF driver, this driver can read more field types such as timestamp (T) or datetime, General, Memo and more.
Download FoxPro JDBC Driver: https://dbschema.com/jdbc-drivers/FoxProJdbcDriver.zip
More info: https://dbschema.com/jdbc-driver/FoxPro.html
GitHub: https://github.com/wise-coders/dbf-jdbc-driver
[DBF] Read/Write DBF file using jDBF: https://www.b4x.com/android/forum/threads/dbf-read-write-dbf-file-using-jdbf.136728/
H2 Database: https://www.b4x.com/android/forum/threads/h2-database.132688/
			
				B4X:
			
		
		
		#Region Project Attributes
    #MainFormWidth: 900
    #MainFormHeight: 500
#End Region
#AdditionalJar: javadbf-1.13.2
#AdditionalJar: dbschema-dbf-jdbc1.0.jar
#AdditionalJar: h2-1.4.200.jar
' Download FoxPro JDBC Driver: https://dbschema.com/jdbc-drivers/FoxProJdbcDriver.zip
' More info: https://dbschema.com/jdbc-driver/FoxPro.html
Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form
    Private xui As XUI
   
    Public dbf As JdbcSQL
    Private driver As String = "com.dbschema.xbase.DbfJdbcDriver"
    Private jdbcUrl As String = "jdbc:dbschema:dbf:/C://Users//Aeric//Desktop//jdbcDBF//Objects//data?[charset=GBK]"
    Private B4XTable1 As B4XTable
End Sub
Sub AppStart (Form1 As Form, Args() As String)
    MainForm = Form1
    MainForm.RootPane.LoadLayout("Layout1")
    MainForm.Show
   
    Wait For (ReadTable) Complete (Success As Boolean)
    If Success Then
        xui.MsgboxAsync("Success", "ReadTable")
    End If
End Sub
Sub Connect As Boolean
    dbf.Initialize(driver, jdbcUrl)
    If dbf.IsInitialized Then
        Return True
    End If
    Return False
End Sub
Sub ReadTable As ResumableSub
    Dim Success As Boolean
    If Connect Then
        Try
            Dim sf As Object = dbf.ExecQueryAsync("dbf", "SELECT * FROM sample", Null)
            Wait For (sf) dbf_QueryComplete (Success As Boolean, res As JdbcResultSet)
            If Success Then              
                Log(" ")
                Do While res.NextRow
                    Log($"id: ${res.GetInt("id")} | Name: ${res.GetString("item_name")} | Barcode: ${res.GetInt("barcode")} | Cost: ${res.GetDouble("avg_cost")} | Created: ${res.GetString("created_on")}"$)
                Loop
                res.Close
            End If
           
            Log(" ")
           
            ' B4J Tutorial H2 Database
            ' https://www.b4x.com/android/forum/threads/h2-database.132688/
            Dim driver As String = "org.h2.Driver"
            Dim url As String = $"jdbc:h2:C://Users//Aeric//.DbSchema//jdbc-dbf-cache/bc2c5c3e2a2f9142b893f50d4287f8c1;database_to_upper=false"$
            Dim DB As SQL
            DB.Initialize(driver, url)
           
            ' Test UPDATE
            DB.ExecNonQuery2("UPDATE sample SET ITEM_NAME = ? WHERE ID = ?", Array("Testing", 1))
           
            B4XTable1.AddColumn("id", B4XTable1.COLUMN_TYPE_NUMBERS)
            B4XTable1.AddColumn("Name", B4XTable1.COLUMN_TYPE_TEXT)
            B4XTable1.AddColumn("Barcode", B4XTable1.COLUMN_TYPE_TEXT)
            B4XTable1.AddColumn("Cost", B4XTable1.COLUMN_TYPE_NUMBERS)
            B4XTable1.AddColumn("Created", B4XTable1.COLUMN_TYPE_TEXT)
           
            Dim data As List
            data.Initialize
           
            Dim res As ResultSet = DB.ExecQuery("SELECT * FROM sample")
            Do While res.NextRow
                Log($"id: ${res.GetInt("id")} | Name: ${res.GetString("item_name")} | Barcode: ${res.GetInt("barcode")} | Cost: ${res.GetDouble("avg_cost")} | Created: ${res.GetString("created_on")}"$)
                data.Add(Array(res.GetInt("id"), res.GetString("item_name"), res.GetInt("barcode"), res.GetDouble("avg_cost"), res.GetString("created_on")))
            Loop
            res.Close
            B4XTable1.SetData(data)
            B4XTable1.Refresh
            Success = True
        Catch
            Log(LastException)
        End Try
        CloseConnection
    End If
    Return Success
End Sub
Sub CloseConnection
    dbf.Close
End Sub 
				 
 
		 
 
		 
			




 
 
		
 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		